还在发愁kafka核心原理?这份近600页的kafka笔记真的帮了我大忙(附P8面试题)

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

Kafka 起初是由 linkedIn 公司 采用 Scala 语言开发的一个多分区、多副本且基于Zookeeper协调的分布式消息系统,现在属于 Apache顶级项目。 kafka 是一个分布式的基于 发布/订阅的 消息队列。主要应用于大数据实时处理领域。kafka 是一个分布式、支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的 基于发布订阅模式的消息引擎系统。

kafka 受到广大公司应用的主要原因有三点:

消息系统:Kafka 和传统的消息系统都具备系统解耦、异步、缓存等功能外,还提供了消息 顺序性保障和 回溯消费功能。

存储系统:Kafka 把消息持久化到磁盘,相对内存存储,降低了数据丢失风险,可以把它作为长期数据存储系统使用。

流失处理平台:为流式处理框架提供了完整的流失处理类库。

Kafka 至今仍是当今大数据技术中当之无愧的王者,由于高吞吐量、可持久化、分布式、支持流数据处理等特性而被广泛应用。 这几年,大数据技术发展迅猛,其中 Kakfa 凭借高可靠、高吞吐、高可用、可伸缩几大特性,成为数据管道技术的首选。越来越多人开始使用 Kafka,对学习源码的需求也愈发强烈,原因主要有以下几个方面:

  1. 了解 Kafka 底层原理,从而搞懂 Kafka 高性能的实现机制;

  1. 快速分析定位线上问题,有针对性地制定调优方案,提升编码功力;

  1. Kafka 的很多优秀设计理念和特性,在官方文档中并未得到充分阐述;

  1. 很多互联网公司在招聘资深技术岗时,都要求“至少读过一种开源框架的源码”;

  1. 加入 Kafka 开源社区,成为一名代码贡献者——一旦你的代码被社区采纳,全世界 Kafka 使用者都会用你写的代码。

然而,大部分人在阅读源码时,还是会遇到很多问题,比如:源码这么多,不知道该重点掌握哪些内容;读源码时缺乏科学的方法,无数次从入门到放弃;知识不够体系化,遇到底层原理等常见面试题,很难有良好表现等等。因此很多次都掉坑里,那么如何避坑呢?

小编刚好整理了一份kafka笔记里都有详细讲到,已打包好,文末有免费获取方式。

脑图

整体的可能看不清楚,后面会分模块展示给大家看

目录:

Kafka入门

  • 什么是Kafka

  • Kafka中的基本概念

为什么选择Kafka

  • 优点

  • 常见场景

Kafka的安装、管理和配置

  • 安装

  • Broker配置

  • 硬件配置对Kafka性能的影响

Kafka的集群

  • 为何需要Kafka集群

  • 如何估算Kafka集群中Broker的数量

  • Broker如何加入Kafka集群

第一个Kafka程序

  • 创建我们的主题

  • 生产者发送消息

  • 消费者接受消息

  • 演示示例

Kafka的生产者

  • 生产者发送消息的基本流程

  • 使用Kafka生产者

  • 序列化

  • 分区

Kafka的消费者

  • 消费者的入门

  • 消费者中的基础概念

  • 消费者中的核心概念

  • Kafka中的消费安全

  • 消费者提交偏移量导致的问题

  • 分区再均衡

  • 优雅退出

  • 反序列化

  • 独立消费者

深入理解Kafka

  • 集群的成员关系

  • 什么是控制器

  • 复制-Kafka的核心

  • 处理请求的内部机制

  • 物理存储机制

可靠的数据传递

  • KafRka提供的可靠性保证和架构上的权衡

  • 复制

  • Broker配置对可靠性的影响

  • 可靠系统里的生产者

  • 可靠系统里的消费者

Spring和Kafka的整合

  • 与Spring/Spring Boot 集成

Kafka实战之削峰填谷

数据管道和流式处理(了解即可)

  • 数据管道基本概念

  • 流式处理基本概念

Kafka面试问题解析(基础+进阶+高阶)

Kafka基础篇

  • Kafka的用途有哪些?使用场景如何?

  • Kafka中的ISR、AR又代表什么? ISR的伸缩又指什么

  • Kafka中的HW. LEO、 LSO、 LW等分别代表什么?

  • Kafka中是怎么体现消息顺序性的?

  • Kafka中的分区器、 序列化器、拦截器是否了解?它们之间的处理顺序是什么?

  • Kafka生产者客户端的整体结构是什么样子的?

  • Kafka生产者客户端中使用了几个线程来处理?分别是什么?

  • Kafka的旧版Scala的消费 者客户端的设计有什么缺陷?

  • 消费组中的消费者个数如果超过topic的分区,那么就会有消费者消费不到数据"这句话是否正确?如消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?

  • 有哪些情形会造成重复消费?哪些情景下会造成消息漏消费?

  • KafkaConsumer是非线程安全的, 那么怎么样实现多线程消费?

  • 简述消费者与消费者之间的关系

  • 当你使用kafka-topics.sh创建 (删除)了一个topic之后, Kafka背后会执行什么?

  • topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?

  • opic的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为什么?

  • 创建topic时如何选择合适的分区数?

Kakfa进阶篇

  • Kafka目前有哪些内部topic,它们都有什么特征?各自的作用又是什么?

  • 优先副本是什么?它有什么特殊的作用?

  • Kafka有哪几处地方有分区分配的概念?简述大致的过程及原理

  • 简述Kafka的日志目录结构

  • Kafka中有哪些索引文件?

  • 如果我指定了一个offset,Kafka怎么查找到对应的消息?

  • 如果我指定了一个timestamp,Kafka怎么查找到对应的消息?

  • 聊一聊你对Kafka的Log Retention的理解

  • 聊一聊你对Kafka的Log Compaction的理解

  • 聊一聊你对Kafka底层存储的理解

  • 聊一聊Kafka的延时操作的原理

  • 聊一聊Kafka控制器的作用

  • Kafka的旧版Scala的消费者客户端的设计有什么缺陷?

  • 消费再均衡的原理是什么?(提示:消费者协调器和消费者协调器)

  • Kafka中的幂等是怎么实现的?

Kafka高级篇

  • Kafka中的事务是怎么实现的?

  • 失效副本是指什么?有哪些应对措施?

  • 多副本下,各个副本中的HW和LEO的演变过程

  • Kafka在可靠性方面做了哪些改进?(HW, LeaderEpoch)

  • 为什么Kafka不支持读写分离?

  • Kafka中的延迟队列怎么实现

  • Kafka中怎么实现死信队列和重试队列?

  • Kafka中怎么做消息审计?

  • Kafka中怎么做消息轨迹?

  • 怎么计算Lag? (注意read. uncommitted和read. committed状态下的不

  • Kafka有哪些指标需要着重关注?

  • Kafka的哪些设计让它有如此高的性能?

别光看手册!手把手教你用SGM2036 LDO设计一个稳定3.3V转1.8V的MCU供电电路(附PCB布局避坑指南) 本文详细介绍了如何使用SGM2036 LDO设计一个稳定的3.3V转1.8V的MCU供电电路,包括需求分析、芯片选型、外围器件计算、PCB布局避坑指南及实测验证。通过实际案例和计算示例,帮助工程师快速掌握LDO应用技巧,确保系统电源稳定可靠。 阅读详情

相关推荐

智能座舱架构与芯片- (9) 音频篇 上

从A2B收发器衍生出来的简化产品具备各种级别的功能,例如端点从节点(不支持TDM)、简化型主节点(支持较短的电缆和更少的从节点数量),以及简化型端点从节点(支持较短电缆和更少的PDM输入)。例如,AVB中的talker和listener是不同的设备,它们的参考时钟源可能并不相同。传统的车载收音机通过天线接收无线电信号,然后由调谐模块(Tuner)进行信号调谐,信道过滤,信道均衡,多路改善,信号解调等,转为数字信号后再交给DSP进行立体声解码,噪声抑制,弱信号处理,最后从车载音响系统进行播放。

joanna_xiao的博客 4912

生产过程中 tcopic 的数量不足或者有空闲可以增加或 者减少吗?为什么?

topic 的分区数只能增加不能减少,因为减少掉的分区也就是被删除的分区的数据难以 处理。 bin/kafka-topics.sh --zookeeper itcast:2181/kafka --alter \ --topic topic-config --partitions 3

小憨憨的博客 253

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 390

为什么Kafka中的分区数只能增加不能减少?

欢迎支持《RabbitMQ实战指南》以及关注微信公众号:朱小厮的博客。 当一个主题被创建之后,依然允许我们对其做一定的修改,比如修改分区个数、修改配置等,这个修改的功能就是由kafka-topics.sh脚本中的alter指令所提供。 我们首先来看如何增加主题的分区数。以前面的主题topic-config为例,当前分区数为1,修改为3,示例如下: [root@node1 kafka_2.11-...

朱小厮的博客 1万+

K-means算法代码实现(python)

K-means算法代码实现以及解决质心选择问题 计算距离 距离通常使用欧几里得距离来衡量 def euclDistance(vector1, vector2): return np.sqrt(sum((vector2 - vector1) ** 2)) 初始化质心 def initCentroids(data, k): numSamples, dim = data.shape ...

江南小帅瓜的博客 1万+

从Android到鸿蒙:UI框架迁移的实战指南与最佳实践

本文为Android开发者提供了将应用UI框架迁移至鸿蒙系统的实战指南。文章深入对比了Android命令式编程与鸿蒙ArkUI声明式编程的核心差异,详细讲解了从环境配置、布局迁移(如RecyclerView转List)、逻辑处理到多设备适配与性能优化的全流程最佳实践,帮助开发者高效完成迁移工作。

weixin_29208077的博客 435

Kafka学习笔记--基础

参考:深入理解Kafka核心设计和实践原理 8、数据保存策略 每个partition物理上对应一个文件夹,此文件叫存储该partition中所有消息和索引文件; 1、基于时间的保存策略:log.retition.hours=168(一周) 2、基于大小的保存策略:log.retention.bytes=1073741824(1G) 9、kafka的消费过程 kafka提供了高级consumerAP...

泡椒酱的的Java学习记录 431

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 304

【报错】(pycharm运行程序)OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading

1 报错 OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading 2 分析原因 通过 activate Distance 进行自己创建的 Distance 虚拟环境中,输入python会显示环境中python的版本信息,再依次import,显然不会报错。 这是因为在Anaconda的环境下有支持 import torch 的 dll,而在PyCharm中使用的是自己创建的新环境,还缺少相应支持的dll,仅需在PyCharm中配置环境变量。.

静谧、淡雅 8623

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

whik1194的博客 759

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 333

AE-扭曲-变形-弧

一些AE效果的着色器实现记录

What_can_you_do的博客 1176

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 546

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 579

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 423

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 1121

JavaSE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 232

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 369

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 180

Docker部署linkding:HTTPS与数据备份

部署私人书签库,除了让页面能够打开,还需要考虑几个实际问题:重建容器后数据是否保留、登录和保存是否正常、升级前怎样备份,以及出现 502 或 CSRF 错误时从哪里检查。本文使用 Docker Compose 部署 linkding,采用默认 SQLite 数据库,通过 Caddy 提供 HTTPS,并完成账户创建、数据持久化验证和备份。如果重建后账户或书签消失,应先检查是否换了项目目录、改了挂载路径,或者启动了另一套实例,不要急着重新初始化。遇到权限问题,应根据日志确认具体目录和运行用户,再调整权限。

tedcloud123的博客 175

C++20协程怎么运行?原理与三大核心组件深度剖析

C++20协程是轻量级的无栈状态机,通过co_await、co_yield、co_return实现挂起与恢复,由Promise、协程句柄和Awaitable三大组件协同工作。协程与线程互补,适用于高效管理大量并发I/O任务,显著降低上下文切换开销。其核心在于编译器生成的状态机机制,需配合库(如cppcoro)使用。掌握Promise控制逻辑、句柄生命周期管理及Awaitable语义,是构建高性能异步程序的基础。

Lucis__的博客 159

动态代理两大流派:JDK 代理与子类代理

业务类想加日志,最直白的写法是侵入式修改: 问题很明显:每个方法都要改一遍,改一个业务要动十处。代理模式的解法是:调用方不直接依赖 ,而是依赖一个代理对象。代理对象长得跟目标一模一样,调用它 → 代理先执行增强逻辑 → 再转调真实对象。 关键在于:代理对象的类型是哪来的?这就是"动态"二字的含义:代理类在运行时才诞生。两个角色: 承载增强逻辑, 负责生成代理类。 组装代理并调用: 输出: 业务代码 一行没动,增强逻辑全在 里。这就是 AOP 的味道。 内部四步: 第 2 步 内部:先查 (同一个接口

Android的专栏 654

c++ explicit关键字详解

explicit。

拒绝AI文,努力在AI时代写出感动人心的好文章 169

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 312
上一篇: 阿里P8架构师首推Netty实战干货,实战篇+面试篇,将知识点一网打尽
下一篇: 从原理到实战搞定Redis,这份Gitee大佬的珍藏带你直击面试
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值