持续总结中!2024年面试必问 20 道 Kafka面试题(一)
一、Kafka 的基础概念有哪些?
Kafka 是一个分布式流处理平台,由 LinkedIn 开发,并于 2011 年成为 Apache 软件基金会的一部分。以下是 Kafka 的一些基础概念:
-
Broker: Kafka 集群由多个 Broker 组成,每个 Broker 存储消息数据并提供消息服务。Broker 充当消息生产者和消费者之间的中介。
-
Topic: Kafka 中的消息以 Topic 为单位进行分类。一个 Topic 可以被视为一个消息类别或者消息队列。生产者将消息发送到特定的 Topic,而消费者从 Topic 中读取消息。
-
Partition: 为了能够横向扩展和并行处理,每个 Topic 可以被分割成多个 Partition。Partition 是 Kafka 中数据的基本存储单元,每个 Partition 在物理上对应一个日志文件,消息在写入时会被追加到日志文件的末尾。
-
Producer: 生产者是向 Kafka Broker 发送消息的客户端。生产者负责创建消息并决定将消息发送到哪个 Topic 的哪个 Partition。
-
Consumer: 消费者是读取 Kafka Broker 上消息的客户端。消费者可以订阅一个或多个 Topic,并从 Partition 中读取消息。
-
Consumer Group: 消费者组是 Kafka 中的一个核心概念,用于实现消息的并发消费和负载均衡。一个 Consumer Group 由多个 Consumer 组成,它们共同消费订阅的 Topic 中的消息。
-
Replica: 为了提高数据的可靠性和可用性,Kafka 支持消息的副本机制。每个 Partition 都可以有多个 Replica,其中有一个 Leader 和若干 Follower。Leader 负责处理所有的读写请求,而 Follower 从 Leader 中同步数据。
-
Leader: 在一个 Partition 的所有 Replica 中,会选举出一个 Leader。所有的读写操作都是通过 Leader 来进行的。
-
Follower: 除了 Leader 之外的其他 Replica 称为 Follower。Follower 的任务是复制 Leader 的数据,以保证数据的高可用性。
-
Controller: Kafka 集群中会有一个 Broker 被选举为 Controller,负责管理集群的元数据和 Partition 的 Leader 选举。
-
ZooKeeper: 在 Kafka 的早期版本中,ZooKeeper 被用来进行集群协调,如选举 Controller、管理 Partition 的状态等。但在新版本中,Kafka 正在逐步去除对 ZooKeeper 的依赖。
-
Offset: Offset 是 Kafka 中用于追踪消息位置的机制。每个消息在 Partition 中都有一个唯一的 Offset,消费者使用 Offset 来确定自己读取消息的位置。
-
Message: Kafka 中的消息是字节数组,它与特定的业务逻辑无关,生产者和消费者可以自定义序列化和反序列化的方式。
-
ISR (In-Sync Replicas): ISR 是指与 Leader 保持同步的 Follower Replicas 的集合。Leader 会维护一个 ISR 列表,确保数据的一致性。
-
High Availability (HA): Kafka 通过 Partition 的副本机制实现了高可用性。如果 Leader 宕机,会从 ISR 中选举出新的 Leader。
-
Durability: Kafka 通过将消息持久化到磁盘,并使用 Replica 来保证消息的持久性,从而确保数据不会丢失。
-
Scalability: Kafka 可以水平扩展,通过增加 Broker 的数量来处理更多的数据和请求。
-
Fault Tolerance: Kafka 的设计允许集群中的节点失败,而不会丢失数据或停止服务。
-
Stream Processing: Kafka 不仅支持消息队列的功能,还支持流处理,可以对数据流进行实时处理和分析。
-
Exactly-Once Semantics (EOS): Kafka 支持精确一次的消息传递语义,确保消息在传输过程中不会丢失或重复。
这些基础概念构成了 Kafka 的核心架构,使其成为一个强大且灵活的分布式消息系统。
二、Broker 在 Kafka 中扮演什么角色?
在 Kafka 架构中,Broker 扮演着至关重要的角色。以下是 Broker 在 Kafka 中的主要功能和特点:
-
消息存储: Broker 是 Kafka 集群中的消息存储节点。每个 Broker 存储着多个 Topic 的消息数据。这些数据被分成多个 Partition,每个 Partition 相当于一个日志文件,消息被追加到日志文件的末尾。
-
消息处理: Broker 负责处理来自生产者的消息发送请求和来自消费者的消息读取请求。生产者将消息发送到特定的 Topic 和 Partition,Broker 负责接收并将这些消息存储在对应的日志文件中。消费者从 Broker 读取消息,并根据 Offset 来确定读取的位置。
-
负载均衡: Kafka 集群由多个 Broker 组成,每个 Broker 可以存储多个 Partition。这种设计允许 Kafka 通过增加 Broker 的数量来实现水平扩展,从而处理更多的消息数据和请求。
-
数据复制: 为了提高数据的可靠性和可用性,Broker 支持消息的副本机制。每个 Partition 可以有多个 Replica,包括一个 Leader 和多个 Follower。Broker 负责管理这些 Replica,确保数据在 Leader 和 Follower 之间同步。
-
Leader 选举: 当一个 Partition 的 Leader 宕机时,Broker 负责从 Follower 中选举出新的 Leader。这个过程称为 Leader 选举,确保 Partition 的高可用性。
-
数据持久性: Broker 通过将消息持久化到磁盘来保证数据的持久性。即使在 Broker 宕机的情况下,只要 Replica 存在,消息数据也不会丢失。
-
数据一致性: Broker 负责维护 Partition 的数据一致性。在写入消息时,Broker 会等待所有同步的 Replica(即 ISR 中的 Replica)确认消息已写入,然后才向生产者确认消息发送成功。
-
集群协调: 在 Kafka 的早期版本中,Broker 依赖 ZooKeeper 来进行集群协调,如选举 Controller、管理 Partition 的状态等。但在新版本中,Kafka 正在逐步去除对 ZooKeeper 的依赖,转而使用内部的 Raft 协议进行集群管理。
-
配置管理: Broker 负责管理 Kafka 集群的配置信息,如 Topic 的配置、日志保留策略、副本因子等。这些配置信息对集群的行为和性能有重要影响。
-
网络通信: Broker 作为 Kafka 集群的网络节点,负责处理来自生产者和消费者的网络请求。Broker 监听来自客户端的连接请求,并维护与客户端之间的网络连接。
-
资源管理: Broker 管理其自身的资源使用情况,包括 CPU、内存、磁盘和网络资源。Broker 需要合理地分配和管理资源,以支持高效的消息处理。
-
监控和日志: Broker 提供监控接口,允许管理员监控 Broker 的运行状态和性能指标。此外,Broker 还会记录日志信息,用于问题诊断和性能分析。
总之,Broker 在 Kafka 中扮演着消息存储、处理、复制、协调和管理的核心角色,是 Kafka 高性能、高可用和可扩展架构的关键组成部分。
相关文章:
持续总结中!2024年面试必问 20 道 Kafka面试题(一)
一、Kafka 的基础概念有哪些? Kafka 是一个分布式流处理平台,由 LinkedIn 开发,并于 2011 年成为 Apache 软件基金会的一部分。以下是 Kafka 的一些基础概念: Broker: Kafka 集群由多个 Broker 组成,每个 Broker 存储…...

Linux共享内存创建和删除
最近项目中使用到了共享内存记录下 创建共享内存: 删除共享内存: 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <u…...
微信小程序如何自定义tabbar
微信小程序自定义底部tabbar是一个提升用户体验和增加小程序个性化的重要功能。以下是自定义底部tabbar的步骤,以供参考: 一、自定义tabbar的重要性 微信小程序默认的底部导航栏(tabbar)样式和布局是固定的,开发者无…...

【并发程序设计】15.信号灯(信号量)
15.信号灯(信号量) Linux中的信号灯即信号量是一种用于进程间同步或互斥的机制,它主要用于控制对共享资源的访问。 在Linux系统中,信号灯作为一种进程间通信(IPC)的方式,与其他如管道、FIFO或共享内存等IPC方式不同&…...

【操作与配置】VS2017与MFC环境配置
【操作与配置】VS2017与MFC环境配置 概述 Visual Studio 是一款强大且多功能的集成开发环境(IDE),适用于软件开发人员和团队。使用此应用程序,您可以构建和调试现代Web应用程序,并利用扩展帮助探索几乎任何编程语言。…...

遥感影像信息提取
刘老师(副教授),来自双一流重点高校,长期从事GIS/RS/3S技术及其生态环境领域中的应用等方面的研究和教学工作,并参与GIS的二次开发,发表多篇sci论文,具有资深的技术底蕴和专业背景。 专题一&am…...
LRU算法
文章目录 LRU算法LRU 如何实现LinkedHashMap来实现的LRU算法的缓存HashMap实现LRU算法的缓存 LRU算法 LRU(Least Recently Used)算法可以使用哈希表和双向链表来实现。哈希表用于快速查找数据,双向链表用于记录数据的访问顺序。以下是LRU算法…...

JVM运行时数据区 - 程序计数器
运行时数据区 Java虚拟机在执行Java程序的过程中,会把它管理的内存划分成若干个不同的区域,这些区域有各自的用途、创建及销毁时间,有些区域随着虚拟机的启动一直存在,有些区域则随着用户线程的启动和结束而建立和销毁࿰…...

1.JAVA小项目(零钱通)
一、说明 博客内容:B站韩顺平老师的视频,以及代码的整理。此项目分为两个版本: 面向过程思路实现面向对象思路实现 韩老师视频地址:【【零基础 快速学Java】韩顺平 零基础30天学会Java】 https://www.bilibili.com/video/BV1fh4…...

Redis这一篇就够了
一.概述 Redis是什么? Redis是远程服务字典服务,是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API。 redis会周期性把更新的数据写入磁盘或把…...

Java web应用性能分析之【jvisualvm远程连接云服务器】
Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具,现在可以详细看看jvisualvm的使用,一般java进程都是部署云服务器,或者托管IDC机…...

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制
springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码,2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次…...
【Python】使用 Pandas 统计每行数据中的空值
缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 在数据分析…...
1pannel部署onenav导航容器编排模板
onenav导航 1pannel部署onenav导航容器编排模板 networks:1panel-network:external: true services:onenav:container_name: onenavimage: helloz/onenav:latestlabels:createdBy: Appsnetworks:- 1panel-networkports:- 127.0.0.1:{port}:80environment:- TZAsia/Shanghaivol…...

linux--实时性优化
linux--实时性优化 1 介绍2 实时性需求3 代表性实时系统4 嵌入式系统嵌入式软件系统结构处理器时钟节拍多任务机制任务调度方式任务调度算法时间片调度算法优先级调度算法基于优先级的时间片调度算法 5 cyclictest 测试工具命令说明命令分析参数含义 6 linux 实时性改进某版本上…...

React-基础样式控制
组件基础样式方案 React组件基础的样式控制有两种方式 1、行内样式(不推荐) 属性名是多个单词的需要使用驼峰写法 也可以把样式都提取到一个变量里,再赋值到style里 2、class类名控制 classnames优化类名控制 classnames是一个简单的JS库&…...

制作ChatPDF之前端Vue搭建(二)
前端界面 接上篇: 制作ChatPDF之Elasticsearch8.13.4搭建(一) 为了实现一个基于 Vue.js 的前端应用,用户可以上传 PDF 文件,输入查询,并在输出框中显示查询结果,你需要以下步骤: 初始化 Vue …...

汽车IVI中控开发入门及进阶(二十一):DAB和FM 收音机
前言: 在过去的十年里,数字收音机对车载娱乐产生了重大影响。现在,几乎每辆新车都标配了这项技术,这也是我们60%以上的人收听收音机的方式。甚至有传言称,在不久的将来,将永久关闭调频发射机,使许多车载收音机过时。但一些相对年轻的汽车在工厂里仍然没有安装DAB,而且…...
智能sql LLM
DB-GPT:彻底改变数据库与私有LLM技术的交互 智能SQL生成:后端技术与LLM的完美结合 智能SQL生成:后端技术与LLM的完美结合_llm sql-CSDN博客 GitHub - eosphoros-ai/DB-GPT: AI Native Data App Development framework with AWEL(Agentic Wor…...
大聪明教你学Java | 深入浅出聊 Stream.parallel()
前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言Ǵ…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...