面试官最怕你懂的Kafka面试题,一招致胜!

👩🏽‍💻个人主页:阿木木AEcru

🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》

💹每一次技术突破,都是对自我能力的挑战和超越。

目录

    • 一、前言
      • Kafka的优点
      • Kafka的使用场景
    • 二、高频面试题
      • 1. Kafka的设计理念
      • 2. 数据传输的事务级别
      • 3. Kafka节点存活判断
      • 4. Producers的消息发送
      • 5. Consumer的分区消息消费
      • 6. Kafka的消息传输模式
      • 7. Kafka的硬盘消息格式
      • 8. Kafka的高效文件存储设计
      • 9. Kafka与传统消息系统的区别
      • 10. Kafka的分区放置策略
      • 11. Kafka分区的存储位置
      • 12. Kafka的消息存储结构
      • 13. Kafka的ACK机制
      • 14. Kafka的消费者数据消费
      • 15. 消费者负载均衡
      • 16. 数据有序性
      • 17. Kafka的生产数据分组策略

一、前言

Kafka是一个分布式流处理平台,由Apache软件基金会开发。它主要用于构建实时数据管道和流式应用程序。Kafka具有高吞吐量、可扩展性和容错性,非常适合用于实时分析系统。

Kafka的优点

  1. 高吞吐量:Kafka能够处理高吞吐量的数据,每秒可以处理数百万条消息。
  2. 可扩展性:Kafka集群可以通过简单地增加更多的Broker来水平扩展。
  3. 持久性:Kafka提供了数据持久化机制,确保消息不会因为系统故障而丢失。
  4. 容错性:通过副本和分区机制,Kafka能够在节点故障的情况下继续运行。
  5. 分布式:Kafka天然支持分布式,可以在多个数据中心之间同步数据。
  6. 实时性:Kafka能够实现实时的数据传输和处理。
  7. 灵活的消息传递:支持发布-订阅和点对点的消息传递模型。
  8. 高可用性:通过ZooKeeper进行集群管理,确保服务的高可用性。
  9. 数据压缩:支持消息压缩,减少存储和传输的开销。
  10. 客户端支持:拥有丰富的客户端库,支持多种编程语言。

Kafka的使用场景

  1. 日志聚合:作为日志收集系统,收集不同服务的日志数据。
  2. 实时分析:用于实时数据处理和分析,如用户行为分析。
  3. 事件源:在微服务架构中,作为事件总线,传递服务间的消息。
  4. 流式处理:实现复杂的流式数据处理逻辑。
  5. 消息队列:作为消息队列,解耦生产者和消费者。
  6. 用户活动跟踪:跟踪用户在应用程序中的行为。
  7. 指标监控:收集和监控系统指标,用于性能优化。
  8. 数据管道:在不同数据库、服务或数据中心之间可靠地传输数据。
  9. 缓存系统:作为缓存系统,存储热点数据。
  10. 任务队列:管理后台任务和异步处理流程。

二、高频面试题

1. Kafka的设计理念

Kafka是一个分布式流处理平台,它通过Topic组织消息,并支持Producers发布消息和Consumers订阅消息。Kafka以集群模式运行,由多个Broker组成,每个Broker是一个独立的服务节点。Producers通过网络将消息发布到集群,而Consumers从Broker拉取消息进行处理。

2. 数据传输的事务级别

Kafka支持三种消息传输事务级别:

  • 最多一次(At most once):消息最多被传输一次,但不能保证消息不丢失。
  • 最少一次(At least once):消息至少被传输一次,但不能保证消息不重复。
  • 精确的一次(Exactly once):确保每个消息只被传输一次,既不丢失也不重复,这是理想状态。

3. Kafka节点存活判断

Kafka节点的存活性基于两个条件:

  • 节点必须保持与ZooKeeper的连接,ZooKeeper通过心跳检测来监控节点状态。
  • 对于Follower节点,必须能够及时同步Leader的写操作,以保持数据一致性。

4. Producers的消息发送

Producers直接将消息发送到目标Topic的Leader节点,无需在多个节点间分发。Kafka集群中的所有节点都能提供关于活动节点和目标分区Leader位置的信息,帮助Producer直接定位。

5. Consumer的分区消息消费

Consumer可以通过指定日志偏移量(offset)来消费特定分区的消息。Consumer拥有offset的控制权,可以选择重新消费之前的消息,这为消息处理提供了灵活性。

6. Kafka的消息传输模式

Kafka采用Pull模式,即Consumer主动从Broker拉取消息。这种模式允许Consumer根据自身的消费能力来决定拉取消息的策略,避免了Push模式下可能由于消息推送速率过快导致Consumer处理不过来的问题。

7. Kafka的硬盘消息格式

Kafka的消息由固定长度的头部和可变长度的字节数组组成,头部包含版本号和CRC32校验码,用于确保数据的完整性和正确性。

8. Kafka的高效文件存储设计

Kafka通过将大文件分割为多个小文件段来提高存储效率,利用索引信息快速定位消息,并尽可能将索引元数据映射到内存中,减少磁盘I/O操作。

9. Kafka与传统消息系统的区别

Kafka的三个关键特性是:

  • 持久化日志,支持重复读取和长期保留。
  • 分布式系统,集群运行,数据复制提高容错性和可用性。
  • 支持实时流式处理。

10. Kafka的分区放置策略

Kafka在创建Topic时,会根据Broker的数量和配置的副本因子来决定分区的放置。第一个分区的副本会随机放置,后续分区的副本会按照一定的规则在Broker间轮询。

11. Kafka分区的存储位置

Kafka的分区存储位置由log.dirs参数指定,可以配置多个目录以提高读写性能。Kafka会优先在分区目录数量最少的目录下创建新的分区。

12. Kafka的消息存储结构

每个分区的多个副本以文件夹的形式存储在Broker上,每个分区都有一个唯一的序号。分区文件夹下包含多个segment文件,这些文件按大小分割,并且有序存储消息。

13. Kafka的ACK机制

Kafka提供了三种ACK级别:

  • acks=0:生产者不等待任何Broker的确认,延迟最低,但可靠性最差。
  • acks=1:等待Leader副本确认,但如果Leader挂掉,可能会丢失数据。
  • acks=all:等待所有副本确认,确保消息不会丢失。

14. Kafka的消费者数据消费

Consumer在消费数据时会记录offset,以便下次从上次停止的位置继续消费。

15. 消费者负载均衡

Kafka通过消费者组和分区分配策略来实现负载均衡,确保每个消费者成员都能均匀地消费消息。

16. 数据有序性

在同一个消费者组内部,消息消费是有序的,但不同消费者组之间的消息消费是无序的。

17. Kafka的生产数据分组策略

生产者根据消息的key来决定将数据发送到哪个分区,这样可以保证具有相同key的消息总是被发送到同一个分区。

感谢观看至此,希望该文章能够帮助到您提升知识和技能。如果您喜欢我的内容,请不要忘记点赞和分享哦!👍

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【最新】生成式人工智能(AIGC)与大语言模型(LLM)学习资源汇总

基本概念学习 a) Andrej Karpathy 的 - 大型语言模型简介:https://www.youtube.com/watch?vzjkBMFhNj_g 该视频对 LLMs 进行了一般性和高级的介绍,涵盖推理、缩放、微调、安全问题和提示注入等主题。 b) Nvidia 的生成式 AI 介绍:Course …

密码学 | 椭圆曲线密码学 ECC 入门(二)

目录 4 椭圆曲线:更好的陷门函数 5 奇异的对称性 6 让我们变得奇特 ⚠️ 原文地址:A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面:本文属搬运博客,自己留着学习。如果你和我一样…

实力认证!亚数产品入选《中国网络安全行业全景图(第十一版)》

2024年4月12日,安全牛第十一版《中国网络安全行业全景图》(以下简称“全景图”)正式发布。 亚数信息科技(上海)有限公司(以下简称“亚数”)成功入选数字证书、加解密、密钥管理三项细分领域。 此…

python内置库_telnetlib学习笔记

文章目录 介绍实例登录设备执行命令在代码中解决分页问题,并保存日志 常见问题处理分页问题 介绍 官网资料 实例 登录设备执行命令 代码from telnetlib import Telnet######################################## 设置变量 ######################################## hos…

使用 SVG绘制各种图表

1. 折线图 <svg width"400" height"200"><!-- X轴 --><line x1"50" y1"150" x2"350" y2"150" stroke"black" /><!-- Y轴 --><line x1"50" y1"150" x2…

Linux 2.进程(守护进程)

守护进程 何谓守护进程常见守护进程进程查看命令pskill命令编写简单守护进程守护进程的父进程 何谓守护进程 daemon&#xff0c;表示守护进程&#xff0c;简称为d&#xff08;进程名后面带d的基本就是守护进程&#xff09; 长期运行&#xff08;一般是开机运行直到关机时关闭&…

【Linux驱动层】iTOP-RK3568学习之路(一):在RK3568上编译内核模块

在RK3568上编译内核模块 helloword.c #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h>static int helloworld_init(void){printk("helloworld!\n");return 0; }static void helloworld_exit(void){printk("hell…

DeepLab V2: 改进版的DeepLab V1

文章目录 摘要部分概述部分:IntroductionRelated Work详细内容:Methods空洞卷积多尺度问题CRFs,全连接条件随机场实验PASCAL VOC 2012PASCAL-Context数据集PASCAL-Person-Part数据集Cityscapes数据集一些改进空间DeepLab V2版本实际上我理解不算是一个新版本,而是V1版本的作…

【Node.js从基础到高级运用】二十五、Node.js中Cluster的作用

引言 Node.js中的cluster模块允许您轻松创建共享服务器端口的子进程。这是一个核心模块&#xff0c;用于在Node.js应用程序中实现多进程架构&#xff0c;以充分利用多核CPU系统的计算能力。 cluster介绍 当您启动一个Node.js应用程序时&#xff0c;默认情况下它运行在单个进程…

【Python】什么是pip,conda,pycharm,jupyter notebook?conda基本教程

pip--conda--pycharm--jupyter notebook &#x1f343;pip&#x1f343;conda&#x1f343;Pycharm&#x1f343;jupyter notebook&#x1f343;Conda基本教程☘️进入base环境☘️创建一个新的环境☘️激活环境☘️退出环境☘️查看电脑上都安装了哪些环境☘️删除已创建的项目…

Mac 部署 GPT-2 预训练模型 gpt2-chinese-cluecorpussmall

文章目录 下载 GPT-2 模型快速开始 GPT-2 下载 GPT-2 模型 https://huggingface.co/uer/gpt2-chinese-cluecorpussmall git clone https://huggingface.co/uer/gpt2-chinese-cluecorpussmall # 或单独下载 LFS GIT_LFS_SKIP_SMUDGE1 git clone https://huggingface.co/uer/gpt…

汉译英早操练-(十四)

汉译英早操练-&#xff08;十三&#xff09;-CSDN博客 文接上回。我们上次说了汉译英的时候遇到长难句要先找动词&#xff0c;在找到动词的发出者&#xff0c;重新整理句子&#xff0c;让含义更加明晰&#xff0c;进而用简明英语的原则&#xff0c;表达汉语当中的长难句。 理论…

使用Docker,【快速】搭建个人博客【WordPress】

目录 1.安装Mysql&#xff0c;创建&#xff08;WordPress&#xff09;用的数据库 1.1.安装 1.2.创建数据库 2.安装Docker 3.安装WodPress&#xff08;使用Docker&#xff09; 3.1.创建文件夹 3.2.查看镜像 3.3.获取镜像 3.4.查看我的镜像 3.5.使用下载的镜像&#xf…

go处理json

在 Go 中&#xff0c;你可以使用内置的 encoding/json 包来处理 JSON 格式数据。该包提供了函数和类型&#xff0c;使你能够将 JSON 数据解析为 Go 对象&#xff08;反序列化&#xff09;或将 Go 对象转换为 JSON 数据&#xff08;序列化&#xff09;。 下面是一些常见的 JSON…

Linux的学习之路:11、地址空间

摘要 本章主要是说一下地址空间&#xff0c;我也只是按照我的理解进行解释&#xff0c;可能说不清楚&#xff0c;欢迎指正 目录 摘要 一、空间布局图 二、代码测试一下 三、进程地址空间 四、测试代码 一、空间布局图 如下方图片可以看出地址空间有几种&#xff0c;这里…

Arduino源代码(ino)在Proteus中调试总结

一、前言 基于BluePill Plus开发板&#xff08;该板是毕设网红板&#xff09; BluePill Plus / WeAct Studio 微行工作室 出品 BluePill-Plus/README-zh.md at master WeActStudio/BluePill-Plus GitHub 首页-WeAct Studio-淘宝网 (taobao.com) 在Proteus中对应的例子是&…

每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路原理)

目录 多源BFS解决最短路算法原理 力扣542. 01 矩阵 解析代码 多源BFS解决最短路算法原理 什么是单源最短路 / 多源最短路&#xff1f; 之前的BFS解决最短路都是解决的单源最短路。 画图来说&#xff0c;单源最短路问题即为&#xff1a; 而对于多源最短路问题: 如何解决此…

Docker容器逃逸-特权模式-危险挂载-Procfs

Docker容器逃逸-特权模式-危险挂载 Docker这个概念&#xff1a; Docker 容器与虚拟机类似&#xff0c;但二者在原理上不同&#xff0c;容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 ‍ Docker会遇到的安…

vue3【实用教程】侦听器 watch,自动侦听 watchEffect(),$watch,手动停止侦听器

watch 侦听明确指定的状态变化执行回调 实战场景 侦听路由传参的变化&#xff0c;重新访问接口&#xff0c;刷新页面侦听接口返回值的变化&#xff0c;刷新页面 侦听值类型数据 // 选项式 API watch: {// 每当 question 改变时&#xff0c;这个函数就会执行question(newQue…

京东微服务microApp使用总结

前言 基于现有业务门户进行微服务基础平台搭建 主应用框架&#xff1a;vue3vite 子应用框架&#xff1a;vue2webpack / vue3vite在这里插入代码片 本地调试即可&#xff1a;主应用子应用进行打通&#xff08;注意&#xff1a;两者都是vue3vite&#xff09; 问题总结 1.嵌入…