首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
紫薯芋泥me
广东海洋大学 Java
发布于广东
关注
已关注
取消关注
@只会刷题的小菜鸡:
存下吧,可能是最全面的Kafka面试八股文了
Kafka 都有哪些特点?高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性:kafka集群支持热扩展持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)高并发:支持数千个客户端同时读写。最全面的Java面试网站请简述下你在哪些场景下会选择 Kafka?日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、HBase、Solr等。消息系统:解耦和生产者和消费者、缓存消息等。用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。流式处理:比如spark streaming和 Flink本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~********如果访问不了Github,可以访问*******。*******Kafka 的设计架构你知道吗?Kafka 架构分为以下几个部分:Producer :消息生产者,就是向 kafka broker 发消息的客户端。Consumer :消息消费者,向 kafka broker 取消息的客户端。Topic :可以理解为一个队列,一个 Topic 又分为一个或多个分区,Consumer Group:这是 kafka 用来实现一个 topic 消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker上,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的id(offset)。将消息发给 consumer,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。Offset:kafka 的存储文件都是按照 offset.kafka 来命名,用 offset 做名字的好处是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。当然 the first offset 就是 00000000000.kafka。Kafka 分区的目的?分区对于 Kafka 集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。你知道 Kafka 是如何做到消息的有序性?kafka 中的每个 partition 中的消息在写入时都是有序的,而且单独一个 partition 只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息是不保证有序的。Kafka Producer 的执行过程?1,Producer生产消息 --> 2,从Zookeeper找到Partition的Leader --> 3,推送消息 --> 4,通过ISR列表通知给Follower --> 5, Follower从Leader拉取消息,并发送ack --> 6,Leader收到所有副本的ack,更新Offset,并向Producer发送ack,表示消息写入成功。给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~********讲一下你使用 Kafka Consumer 消费消息时的线程模型,为何如此设计?Thread-Per-Consumer Model,这种多线程模型是利用Kafka的topic分多个partition的机制来实现并行:每个线程都有自己的consumer实例,负责消费若干个partition。各个线程之间是完全独立的,不涉及任何线程同步和通信,所以实现起来非常简单。请谈一谈 Kafka 数据一致性原理一致性就是说不论是老的 Leader 还是新选举的 Leader,Consumer 都能读到一样的数据。假设分区的副本为3,其中副本0是 Leader,副本1和副本2是 follower,并且在 ISR 列表里面。虽然副本0已经写入了 Message4,但是 Consumer 只能读取到 Message2。因为所有的 ISR 都同步了 Message2,只有 High Water Mark 以上的消息才支持 Consumer 读取,而 High Water Mark 取决于 ISR 列表里面偏移量最小的分区,对应于上图的副本2,这个很类似于木桶原理。这样做的原因是还没有被足够多副本复制的消息被认为是“不安全”的,如果 Leader 发生崩溃,另一个副本成为新 Leader,那么这些消息很可能丢失了。如果我们允许消费者读取这些消息,可能就会破坏一致性。试想,一个消费者从当前 Leader(副本0) 读取并处理了 Message4,这个时候 Leader 挂掉了,选举了副本1为新的 Leader,这时候另一个消费者再去从新的 Leader 读取消息,发现这个消息其实并不存在,这就导致了数据不一致性问题。当然,引入了 High Water Mark 机制,会导致 Broker 间的消息复制因为某些原因变慢,那么消息到达消费者的时间也会随之变长(因为我们会先等待消息复制完毕)。延迟时间可以通过参数 replica.lag.time.max.ms 参数配置,它指定了副本在复制消息时可被允许的最大延迟时间。ISR、OSR、AR 是什么?ISR:In-Sync Replicas 副本同步队列OSR:Out-of-Sync ReplicasAR:Assigned Replicas 所有副本ISR是由leader维护,follower从leader同步数据有一些延迟(具体可以参见 图文了解 Kafka 的副本复制机制),超过相应的阈值会把 follower 剔除出 ISR, 存入OSR(Out-of-Sync Replicas )列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。LEO、HW、LSO、LW等分别代表什么LEO:是 LogEndOffset 的简称,代表当前日志文件中下一条HW:水位或水印(watermark)一词,也可称为高水位(high watermark),通常被用在流式处理领域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于时间层面上的进度。在Kafka中,水位的概念反而与时间无关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移(offset)。取 partition 对应的 ISR中 最小的 LEO 作为 HW,consumer 最多只能消费到 HW 所在的位置上一条信息。LSO:是 LastStableOffset 的简称,对未完成的事务而言,LSO 的值等于事务中第一条消息的位置(firstUnstableOffset),对已完成的事务而言,它的值同 HW 相同LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值。数据传输的事务有几种?数据传输的事务定义通常有以下三种级别:(1)最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输(2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.(3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被Kafka 消费者是否可以消费指定分区消息?Kafa consumer消费消息时,向broker发出fetch请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer拥有了offset的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的。Kafka消息是采用Pull模式,还是Push模式?Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息。一些消息系统比如Scribe和Apache Flume采用了push模式,将消息推送到下游的consumer。这样做有好处也有坏处:由broker决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka还是选取了传统的pull模式。Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下,consumer就可以根据自己的消费能力去决定这些策略。Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发Kafka 高效文件存储设计特点Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。通过索引信息可以快速定位message和确定response的最大大小。通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小Kafka创建Topic时如何将分区放置到不同的Broker中副本因子不能大于 Broker 的个数;第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是随机产生的谈一谈 Kafka 的再均衡在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。Rebalance的过程如下:第一步:所有成员都向coordinator发送请求,请求入组。一旦所有成员都发送了请求,coordinator会从中选择一个consumer担任leader的角色,并把组成员信息以及订阅信息发给leader。第二步:leader开始分配消费方案,指明具体哪个consumer负责消费哪些topic的哪些partition。一旦完成分配,leader会将这个方案发给coordinator。coordinator接收到分配方案之后会把方案发给各个consumer,这样组内的所有成员就都知道自己应该消费哪些分区了。所以对于Rebalance来说,Coordinator起着至关重要的作用Kafka 是如何实现高吞吐率的?Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率:顺序读写;零拷贝文件分段批量发送数据压缩。Kafka 缺点?由于是批量发送,数据并非真正的实时;对于mqtt协议不支持;不支持物联网传感数据直接接入;仅支持统一分区内消息有序,无法实现全局消息有序;监控不完善,需要安装插件;依赖zookeeper进行元数据管理;Kafka 新旧消费者的区别旧的 Kafka 消费者 API 主要包括:SimpleConsumer(简单消费者) 和 ZookeeperConsumerConnectir(高级消费者)。SimpleConsumer 名字看起来是简单消费者,但是其实用起来很不简单,可以使用它从特定的分区和偏移量开始读取消息。高级消费者和现在新的消费者有点像,有消费者群组,有分区再均衡,不过它使用 ZK 来管理消费者群组,并不具备偏移量和再均衡的可操控性。现在的消费者同时支持以上两种行为,所以为啥还用旧消费者 API 呢?Kafka 分区数可以增加或减少吗?为什么?我们可以使用 bin/kafka-topics.sh 命令对 Kafka 增加 Kafka 的分区数据,但是 Kafka 不支持减少分区数。Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,还是保留?删除的话,那么这些没消费的消息不就丢了。如果保留这些消息如何放到其他分区里面?追加到其他分区后面的话那么就破坏了 Kafka 单个分区的有序性。如果要保证删除分区数据插入到其他分区保证有序性,那么实现起来逻辑就会非常复杂。
点赞 9
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
05-29 17:13
江苏省宝应中学 后端
2025年4月21日 美团一面 非核心部门 一面挂复盘
本篇文章纯手打1. 请讲一下反射 反射是 Java 的核心机制运行程序在运行时动态的分析操作类,方法,字段等元信息首先是获取 Class 类 每个引用数据类型都可以通过 Class 类提取出来常见的方法有三种第一种直接通过.class第二种是 Object 超类里面的 getObject 方法第三种是 Class.forName()方法 通过全类名获取我们通过 class 类接着是而来的是三个类 构造方法类 Constructer 动态创建对象 类似于破坏 spring 中的单例模式方法类 Method 类 可以动态调用类中的方法字段类 Field 类 可以动态修改字段成员变量 的数值 如设置...
27双非 Java后端开...
面试问题记录
牛客创作赏金赛
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
05-28 18:40
已编辑
比较真是偷走幸福的贼
真是没办法平衡了,同学买了个项目,包装了简历,现在春招签约了个薪资待遇都不错的公司,为什么别人运气就那么好,我真是破防了!!为什么自己春招这么不顺利 有口头offer还被鸽了 买简历真的不会被发现吗?
芒果豆浆:
包装简历 面试问题也得答出来才能过呀
你觉得今年春招回暖了吗
点赞
评论
收藏
分享
04-10 05:18
广西财经学院 财务
求广西南宁的内推,什么岗位都可以了解一下
玉无心❤️:
发照片干啥 发简历啊
点赞
评论
收藏
分享
04-22 15:13
已编辑
Java
两周了,估计是凉了
HR劝我先签一个保底,我估计是没HC了 更新:录用评估未通过,终于不用痛苦的等待了
爱吃肉的伊登在写日记:
不愧是华子的儿子 一样出声
新凯来求职进展汇总
点赞
评论
收藏
分享
今天 19:48
已编辑
华南理工大学 Python
字节-懂车帝春招面经
岗位是测开,技术面2天速通,OC时间线大概一周一面5.302.synchronized 关键字介绍一下?线程同步机制保证线程安全:任一时刻只有一个线程访问共享资源3.抽象类和接口有什么区别?两者的特点: 抽象类用于描述类的共同特性与行为。包含成员变量、构造方法、具体方法。实现适用于有明显继承关系的场景。 接口类用于描述类的功能。包含常量、抽象方法(Java 8 以后可以有默认方法和静态方法)。适用于定义类的能力。主要区别定义方式使用abstract关键字使用interface关键字方法实现可以有具体方法和抽象方法Java 8前只能有抽象方法,之后可以有默认方法和静态方法实现变量可以有任意类型的...
投递字节跳动等公司7个岗位 >
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
1
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
我被光速开除了……
9845
2
...
字节last day,知无不言!
3691
华为开奖进度👉
热聊中
3
...
分享我的秋招之路(2025届版)
3288
4
...
🐧应届生选offer防踩坑指南:为什么"有鹅选鹅"是当前最佳策略?
3103
5
...
找实习三个月,感觉已无心气
2865
6
...
字节暑期捡漏!附面经
2789
7
...
作为面试官,比较喜欢听到「实习收获」回答是什么样的?
2754
8
...
发现很多同学不会写简历
2248
9
...
你的经历比较单薄, 但简历又弥补了这一点--双非仔个人简历分享
2225
10
...
中金所一面
2059
创作者周榜
更多
正在热议
更多
#
晒一晒你的工位
#
75132次浏览
246人参与
#
24届的你们现状如何了?
#
68788次浏览
397人参与
#
华泰证券Fintech星战营
#
191350次浏览
348人参与
#
写给毕业5年后的自己
#
7804次浏览
138人参与
#
电网笔面经互助
#
32938次浏览
330人参与
#
职场捅娄子大赛
#
339113次浏览
3421人参与
#
实习中的菜狗时刻
#
356381次浏览
3265人参与
#
今年形式下双非本找得到工作吗
#
136758次浏览
1040人参与
#
我的第一份实习怎么找的
#
101471次浏览
998人参与
#
工作压力大怎么缓解
#
77506次浏览
924人参与
#
想给25届机械人的秋招建议
#
26318次浏览
218人参与
#
机械人,你的秋招第一份简历被谁挂了
#
137632次浏览
1972人参与
#
入职第三天,晒晒你的工位
#
30162次浏览
143人参与
#
25届非技术实习投递记录
#
116191次浏览
969人参与
#
实习必须要去大厂吗?
#
95080次浏览
1337人参与
#
你最满意的offer薪资是哪家公司?
#
25175次浏览
129人参与
#
面试被问期望薪资时该如何回答
#
248277次浏览
1444人参与
#
腾讯求职进展汇总
#
830998次浏览
8826人参与
#
请用你的专业向妈妈表白
#
15780次浏览
111人参与
#
选完offer后,你后悔学机械吗?
#
28544次浏览
157人参与
#
你的秋招第一场笔试是哪家
#
129145次浏览
1404人参与
牛客网
牛客企业服务