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

news2024/11/26 3:28:01

👩🏽‍💻个人主页:阿木木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.coloradmin.cn/o/1607004.html

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

相关文章

赞:java使用easy-excel导入模板下载提供用户进行导入

就是我们在点击导入的时候,一般都是有一个模板的,我们需要下载这个模板,然后再按照这个excel模板填充数据之后,再导入。 那么导出模板下载,说白了和前面一篇 赞:java使用easy-excel导出数据的通用模板思路…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点,线程控制、线程互斥、线程同步,今天我们将他们做一个总结,运用所学知识写一个较为完整的线程池,同时…

算法打卡day38

今日任务: 1)完全背包理论基础(卡码网52. 携带研究材料) 2)518.零钱兑换II 3)377. 组合总和 Ⅳ 4)复习day13 完全背包理论基础(卡码网52. 携带研究材料) 题目链接:52. 携带研究材料(第七期模拟…

go语言是如何实现协程的

写在文章开头 go语言的精华就在于协程的设计,只有理解协程的设计思想和工作机制,才能确保我们能够完全的利用协程编写强大的并发程序。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专…

51-M.2 B Key-5G模块 (U)SIM卡电路设计

视频链接 M.2 B Key-5G模块 &(U)SIM卡电路设计01_哔哩哔哩_bilibili M.2 B Key-5G模块 &(U)SIM卡电路设计 1、5G模块 &(U)SIM卡相关概念 1.1、5G模块(RM500Q-GL) R…

✯✯✯绍兴ISO9001认证:打造卓越质量管理的核心引擎✯✯✯

🌈绍兴ISO9001认证:🌺打造卓越质量管理的💗核心引擎🥕 🚈在绍兴这座历史悠久、🍅文化底蕴深厚的城市中,🏣企业间的竞争日趋激烈。💁‍♂️为了在这场激烈的&a…

LeetCode第797题: 所有可能的路径

目录 1.问题描述 2.问题分析 1.问题描述 给你一个有 n 个节点的有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)。 graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08…

openai api_key分享

sk-proj-aHU3aSlMAReiF8d6li9BT3BlbkFJsxmlRhLKlR55xIjpeJ10 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

二次元AI绘画生成器免费:教你生成精美图片

二次元AI绘画生成器,无疑是现代技术与艺术完美结合的典范。这些工具不仅将复杂的绘画过程简化,更让每一个艺术爱好者的创意得以充分展现。这些生成器能够精准捕捉大家的创意精髓,将其转化为细腻、独特的二次元画作。无论是角色设计、场景描绘…

波奇学Linux:ip协议

ip报文解析 4位版本:一般是4表示通信的ip版本号是ipv4还是ipv6 4位首部长度:数值*4ip报头长度 取值范围为[0101,1111], 报头长度就是[5*420,15*460] 8位服务类型(TOS):4位TOS位段和3位优先权字段和一位保留字段 4位TOS相当于给路由器转发…

Redis快速入门操作

启动Redis 进入命令行客户端 字符串命令常用操作(redis默认使用字符串来存储数据) 列表(Lists)常用操作 集合(Sets)常用操作 (无序集合且元素不可重复) 有序集合(So…

windows和虚拟机互传文件

在虚拟机中设置共享文件夹 操作方法:打开VMware–>虚拟机–>设置–>选项–>共享文件夹(见下图),大家在共享文件夹当中就可以把Windows当中的D盘或者其它盘共享到虚拟机中。比如我就是将D盘和E盘共享到了虚拟机中。 共…

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

目录 7 这一切意味着什么? 8 椭圆曲线密码学的应用 9 椭圆曲线密码学的缺点 10 展望未来 ⚠️ 原文地址:A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面:本文属搬运博客,自己留…

pip下载包opencv出错(报错failed building wheel for opencv-python解决方法)

文章目录 1 报错2 原因3 解决方法参考 1 报错 ERROR: Could not build wheels for opencv-python, which is required to install pypr2 原因 版本不兼容的问题,当使用pip install opencv-python命令安装的是最新版本,当前python版本不支持。需要安装当前版本pyth…

「GO基础」在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

Embedding例子:简单NN网络、迁移学习例子

一、简单例子:构造简单NN网络生成Embedding 1、pytorch例子 2、tensorflow例子 # 1导入模块 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding import numpy as np# 2构建语料库 corpus[[…

配置静态IP【windows+ubuntu】

Windows配置静态IP 如下图所示,通过“网络和Internet进入设置界面”,依次操作“更改适配器选项”->选择要配置静态ip的网络“属性”->选择IPV4的属性->配置静态ip的地址、子网掩码、默认网关。默认网关应和路由器上的设置保持一致。 Ubuntu配…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面: 这里是贝塔贝塔,照例来一段闲聊 打比赛但赛前一波三折,又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛,但好像真的跟卫星的关系不大,没有bin方…

Redis中的订阅发布(三)

订阅发布 发送消息 当一个Redis客户端执行PUBLISH 命令将消息message发送给频道channel的时候,服务器需要执行以下 两个动作: 1.将消息message发送给channel频道的所有订阅者2.如果一个或多个模式pattern与频道channel相匹配,那么将消息message发送给…

基于SpringBoot+Vue的便利店管理系统 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:11张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&#…