当前位置: 首页 > news >正文

持续总结中!2024年面试必问 20 道 Kafka面试题(一)

一、Kafka 的基础概念有哪些?

Kafka 是一个分布式流处理平台,由 LinkedIn 开发,并于 2011 年成为 Apache 软件基金会的一部分。以下是 Kafka 的一些基础概念:

  1. Broker: Kafka 集群由多个 Broker 组成,每个 Broker 存储消息数据并提供消息服务。Broker 充当消息生产者和消费者之间的中介。

  2. Topic: Kafka 中的消息以 Topic 为单位进行分类。一个 Topic 可以被视为一个消息类别或者消息队列。生产者将消息发送到特定的 Topic,而消费者从 Topic 中读取消息。

  3. Partition: 为了能够横向扩展和并行处理,每个 Topic 可以被分割成多个 Partition。Partition 是 Kafka 中数据的基本存储单元,每个 Partition 在物理上对应一个日志文件,消息在写入时会被追加到日志文件的末尾。

  4. Producer: 生产者是向 Kafka Broker 发送消息的客户端。生产者负责创建消息并决定将消息发送到哪个 Topic 的哪个 Partition。

  5. Consumer: 消费者是读取 Kafka Broker 上消息的客户端。消费者可以订阅一个或多个 Topic,并从 Partition 中读取消息。

  6. Consumer Group: 消费者组是 Kafka 中的一个核心概念,用于实现消息的并发消费和负载均衡。一个 Consumer Group 由多个 Consumer 组成,它们共同消费订阅的 Topic 中的消息。

  7. Replica: 为了提高数据的可靠性和可用性,Kafka 支持消息的副本机制。每个 Partition 都可以有多个 Replica,其中有一个 Leader 和若干 Follower。Leader 负责处理所有的读写请求,而 Follower 从 Leader 中同步数据。

  8. Leader: 在一个 Partition 的所有 Replica 中,会选举出一个 Leader。所有的读写操作都是通过 Leader 来进行的。

  9. Follower: 除了 Leader 之外的其他 Replica 称为 Follower。Follower 的任务是复制 Leader 的数据,以保证数据的高可用性。

  10. Controller: Kafka 集群中会有一个 Broker 被选举为 Controller,负责管理集群的元数据和 Partition 的 Leader 选举。

  11. ZooKeeper: 在 Kafka 的早期版本中,ZooKeeper 被用来进行集群协调,如选举 Controller、管理 Partition 的状态等。但在新版本中,Kafka 正在逐步去除对 ZooKeeper 的依赖。

  12. Offset: Offset 是 Kafka 中用于追踪消息位置的机制。每个消息在 Partition 中都有一个唯一的 Offset,消费者使用 Offset 来确定自己读取消息的位置。

  13. Message: Kafka 中的消息是字节数组,它与特定的业务逻辑无关,生产者和消费者可以自定义序列化和反序列化的方式。

  14. ISR (In-Sync Replicas): ISR 是指与 Leader 保持同步的 Follower Replicas 的集合。Leader 会维护一个 ISR 列表,确保数据的一致性。

  15. High Availability (HA): Kafka 通过 Partition 的副本机制实现了高可用性。如果 Leader 宕机,会从 ISR 中选举出新的 Leader。

  16. Durability: Kafka 通过将消息持久化到磁盘,并使用 Replica 来保证消息的持久性,从而确保数据不会丢失。

  17. Scalability: Kafka 可以水平扩展,通过增加 Broker 的数量来处理更多的数据和请求。

  18. Fault Tolerance: Kafka 的设计允许集群中的节点失败,而不会丢失数据或停止服务。

  19. Stream Processing: Kafka 不仅支持消息队列的功能,还支持流处理,可以对数据流进行实时处理和分析。

  20. Exactly-Once Semantics (EOS): Kafka 支持精确一次的消息传递语义,确保消息在传输过程中不会丢失或重复。

这些基础概念构成了 Kafka 的核心架构,使其成为一个强大且灵活的分布式消息系统。

二、Broker 在 Kafka 中扮演什么角色?

在 Kafka 架构中,Broker 扮演着至关重要的角色。以下是 Broker 在 Kafka 中的主要功能和特点:

  1. 消息存储: Broker 是 Kafka 集群中的消息存储节点。每个 Broker 存储着多个 Topic 的消息数据。这些数据被分成多个 Partition,每个 Partition 相当于一个日志文件,消息被追加到日志文件的末尾。

  2. 消息处理: Broker 负责处理来自生产者的消息发送请求和来自消费者的消息读取请求。生产者将消息发送到特定的 Topic 和 Partition,Broker 负责接收并将这些消息存储在对应的日志文件中。消费者从 Broker 读取消息,并根据 Offset 来确定读取的位置。

  3. 负载均衡: Kafka 集群由多个 Broker 组成,每个 Broker 可以存储多个 Partition。这种设计允许 Kafka 通过增加 Broker 的数量来实现水平扩展,从而处理更多的消息数据和请求。

  4. 数据复制: 为了提高数据的可靠性和可用性,Broker 支持消息的副本机制。每个 Partition 可以有多个 Replica,包括一个 Leader 和多个 Follower。Broker 负责管理这些 Replica,确保数据在 Leader 和 Follower 之间同步。

  5. Leader 选举: 当一个 Partition 的 Leader 宕机时,Broker 负责从 Follower 中选举出新的 Leader。这个过程称为 Leader 选举,确保 Partition 的高可用性。

  6. 数据持久性: Broker 通过将消息持久化到磁盘来保证数据的持久性。即使在 Broker 宕机的情况下,只要 Replica 存在,消息数据也不会丢失。

  7. 数据一致性: Broker 负责维护 Partition 的数据一致性。在写入消息时,Broker 会等待所有同步的 Replica(即 ISR 中的 Replica)确认消息已写入,然后才向生产者确认消息发送成功。

  8. 集群协调: 在 Kafka 的早期版本中,Broker 依赖 ZooKeeper 来进行集群协调,如选举 Controller、管理 Partition 的状态等。但在新版本中,Kafka 正在逐步去除对 ZooKeeper 的依赖,转而使用内部的 Raft 协议进行集群管理。

  9. 配置管理: Broker 负责管理 Kafka 集群的配置信息,如 Topic 的配置、日志保留策略、副本因子等。这些配置信息对集群的行为和性能有重要影响。

  10. 网络通信: Broker 作为 Kafka 集群的网络节点,负责处理来自生产者和消费者的网络请求。Broker 监听来自客户端的连接请求,并维护与客户端之间的网络连接。

  11. 资源管理: Broker 管理其自身的资源使用情况,包括 CPU、内存、磁盘和网络资源。Broker 需要合理地分配和管理资源,以支持高效的消息处理。

  12. 监控和日志: 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的步骤&#xff0c;以供参考&#xff1a; 一、自定义tabbar的重要性 微信小程序默认的底部导航栏&#xff08;tabbar&#xff09;样式和布局是固定的&#xff0c;开发者无…...

【并发程序设计】15.信号灯(信号量)

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

【操作与配置】VS2017与MFC环境配置

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

遥感影像信息提取

刘老师&#xff08;副教授&#xff09;&#xff0c;来自双一流重点高校&#xff0c;长期从事GIS/RS/3S技术及其生态环境领域中的应用等方面的研究和教学工作&#xff0c;并参与GIS的二次开发&#xff0c;发表多篇sci论文&#xff0c;具有资深的技术底蕴和专业背景。 专题一&am…...

LRU算法

文章目录 LRU算法LRU 如何实现LinkedHashMap来实现的LRU算法的缓存HashMap实现LRU算法的缓存 LRU算法 LRU&#xff08;Least Recently Used&#xff09;算法可以使用哈希表和双向链表来实现。哈希表用于快速查找数据&#xff0c;双向链表用于记录数据的访问顺序。以下是LRU算法…...

JVM运行时数据区 - 程序计数器

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

1.JAVA小项目(零钱通)

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

Redis这一篇就够了

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

Java web应用性能分析之【jvisualvm远程连接云服务器】

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

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制

springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码&#xff0c;2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次&#xf…...

【Python】使用 Pandas 统计每行数据中的空值

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在数据分析…...

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、行内样式&#xff08;不推荐&#xff09; 属性名是多个单词的需要使用驼峰写法 也可以把样式都提取到一个变量里&#xff0c;再赋值到style里 2、class类名控制 classnames优化类名控制 classnames是一个简单的JS库&…...

制作ChatPDF之前端Vue搭建(二)

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

汽车IVI中控开发入门及进阶(二十一):DAB和FM 收音机

前言: 在过去的十年里,数字收音机对车载娱乐产生了重大影响。现在,几乎每辆新车都标配了这项技术,这也是我们60%以上的人收听收音机的方式。甚至有传言称,在不久的将来,将永久关闭调频发射机,使许多车载收音机过时。但一些相对年轻的汽车在工厂里仍然没有安装DAB,而且…...

智能sql LLM

DB-GPT&#xff1a;彻底改变数据库与私有LLM技术的交互 智能SQL生成&#xff1a;后端技术与LLM的完美结合 智能SQL生成&#xff1a;后端技术与LLM的完美结合_llm sql-CSDN博客 GitHub - eosphoros-ai/DB-GPT: AI Native Data App Development framework with AWEL(Agentic Wor…...

大聪明教你学Java | 深入浅出聊 Stream.parallel()

前言 &#x1f34a;作者简介&#xff1a; 不肯过江东丶&#xff0c;一个来自二线城市的程序员&#xff0c;致力于用“猥琐”办法解决繁琐问题&#xff0c;让复杂的问题变得通俗易懂。 &#x1f34a;支持作者&#xff1a; 点赞&#x1f44d;、关注&#x1f496;、留言&#x1f4…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...