Kafka都有哪些重要知识点,如有遗漏欢迎补充
最近梳理了一遍Kafka的重要知识点,供有面试需求的小伙伴们使用。注意:由于本人只是一个初级Java开发,因此这篇小短文仅供初级Java工程师以及应届生使用,大佬请直接划走。如果某些大佬不介意的话,欢迎补充一些知识点或指正一些错误,感谢感谢。
一 概述
为什么会诞生消息系统,Kafka、Pulsar、RocketMQ、ActiveMQ和RabbitMQ的优劣和技术选型。
在当前的大数据架构中(离线数仓、实时数仓以及湖仓一体化架构),Kafka扮演什么样的角色。
图文演示Kafka都有哪些核心组件,Kafka的总体工作流程是什么样的。
该如何正确理解 Kafka 的端到端的延时,哪些延迟是避免不了的。
二 Broker端
Kafka如何利用磁盘的顺序写机制,实现单机每秒几十万消息写入。
Kafka是如何利用零拷贝机制消费数据的,零拷贝的原理是什么?
从操作系统底层深入讲解IO中断,Kafka消费数据时为什么要在内核端处理。
Kafka如何借用PageCache技术实现高吞吐,什么是吞吐量和处理延迟,Kafka如何做到高吞吐和低延迟。
Kafka的PageCache污染是怎么回事,PageCache该设置多大才合适。
Kafka如何利用零拷贝和页缓存技术,实现高性能的消费数据。
Kafka底层的日志(log)文件的存储机制是什么,如何存储offset,Log文件的分段存储机制是什么。
为什么说Kafka自身的日志格式能够节省磁盘空间的开销。
Kafka为什么能够做到TB量级的数据,在分布式系统中均匀分配。
如何基于多副本冗余机制,保证Kafka具有高可用性。
为保证Kafka数据不丢失,引入的ISR机制到达是什么意思。
基于Zookeeper构建的Kafka无状态自由伸缩技术的实现原理是什么。
基于KRaft构建的Kafka无状态自由伸缩技术的实现原理是什么。
为什么越来越多的分布式系统,包括Kafka都在去Zookeeper。
如何让Kafka集群,在处理数据请求的时候实现负载均衡的效果。
Kafka集群如何基于Zookeeper实现节点发现与故障感知的。
Kafka集群如何基于KRaft实现节点发现与故障感知的。
Kafka的ISR机制,如何保证Leader分区副本宕机时只能选择同步的Follower分区副本。
你真的了解Partition的几个核心offset的含义吗?HW、LEO是什么,如何基于LEO计算HW。
深入探究Leader和Follower的LEO的更新机制、HW的更新机制。
即使有HW机制,在切换Leader分区副本时,为什么会丢失数据。
Kafka 0.11版本引入leader epoch机制,如何解决高水位机制存在的弊端。
indexFile和Timestamp文件的存储机制是什么?如何利用二分查找法快速定位数据。
硬盘上的日志文件是基于什么样的策略,做定期删除腾挪空间的。
Kafka是如何自定义TCP之上的通信协议以及使用长连接通信的。
Broker是如何基于Reactor模式,进行IO多路转接请求处理数据的。
Kafka的Controller是什么?如何基于Zookeeper选举Controller,Container的故障转移是如何实现的。
如何基于KRaft一致性算法,实现Kafka的Controller选举以及故障转移。
在创建Topic时,Kafka Controller是如何实现Leader分区副本选举的。
在删除Topic的时候,如何基于Controller做数据的清理工作。
Kafka Controller是如何基于Zookeeper感知Broker上线或者下线的。
Kafka Controller是如何基于KRaft感知Broker上线或者下线的。
Kafka自身的生态系统都有哪些内容,KSQL或者Kafka Streaming能否替代Flink的实时计算框架地位?
如果线上Kafka的某个topic数据量很大,该如何增加分区数量,要考虑哪些因素。
对核心业务数据Topic需要动态增加副本因子,该如何操作,需要注意哪些问题。
Kafka集群的Topic分区分布分配机制是什么样的
为保证线上数据安全,该如何监控Leader、Follower 和 In-Sync Replica(ISR),如何配置ISR列表。
Kafka的ISR是如何伸缩,如何广播ISR列表。
前任Leader副本恢复,Follower副本被踢出ISR列表会发生什么。
Kafka用到的PageCache的预读和顺序读机制是怎么回事?
如果某台broker机器承载了过多leader分区副本,该如何处理。
Kafka的内部通信原理是什么样的。
Kafka如何通过缓冲池优化JVM GC。
Kafka的批量发送消息和日志存储模式
三 生产者
Kafka Producer怎么把消息发送给Broker集群的,负责IO请求的Sender线程是如何基于缓冲区发送数据的。
Kafka的生产者发送消息也会阻塞吗,当消息缓冲区满的时候会抛出异常吗。
Kafka可以同时接受有几个发送到Broker的请求没收到响应。
Producer的缓冲区内部数据结构是什么样的。
Kafka在发送消息时,acks参数到底是干嘛的,acks等于0、1、-1有哪些优势和不足。
Kafka在发送消息时,该如何设置最小同步副本的数量。
Kafka生产者的Sticky分区方式有哪些优势。
Kafka生产消息为什么快之PageCache。
Kafka生产消息为什么快之顺序写
RecordAccumulator的tryAppend()的工作原理是什么。
发送消息给Broker时遇到的各种异常该如何处理。
发送消息的缓冲区,batch.size,linger.ms应该如何优化来提升发送的吞吐量。
如何根据业务场景对消息大小以及请求超时,设置成一个合理的参数值。
Kafka在发送消息时,针对瞬间异常的消息重试参数,需要考虑哪些因素。
Kafka生产者自定义分区、序列化和拦截器的必要性以及注意事项。
四 消费者
Kafka的Consumer是如何持续消费的,如何从Kafka集群获取消息的。
Kafka的消费者重启后继续消费原理。
Kafka的消费者offset的记录方式以及基于内部topic的提交模式。
Kafka通过哪三个参数感知消费者发生故障。
Kafka在消费数据时,有哪几个参数需要注意以及该如何设置。
如果对消费者offset相关的参数,设置不好对线上系统产生哪些影响。
消费者更新__consumer_offsets时,需要更新哪些内存结构,以及
Kafka如何做到精准一次性消费数据。
如何保证Kafka消费数据的可靠性。
Kafka自动提交offset造成数据重复和丢失的场景有哪些?为什么要改成手动提交offset。
Kafka的Consumer Group消费数据的优势。
如何实现Consumer Group的状态机流转,状态机是什么意思。
Kafka的Group Coordinator是怎么工作的,主要负责什么,消费者选择Coordinator的算法是如何实现的。
Coordinator和Consume Leader如何协作制定分区方案。
Kafka消费者组的RangeAssignor分区分配策略是什么?
Kafka消费者组的RoundRobin分区分配策略是什么?解决了什么问题有哪些弊端。
Kafka消费者组的StickyAssignor分区分配策略是什么?解决了什么问题有哪些弊端。
Kafka在发生Rebalance时,CooperativeStickyAssignor有哪些改良。
Kafka最新设计的rebalance分代机制有哪些作用。
配置Kafka静态的Group 成员,避免不必要的Rebalance。
在哪些场景下会触发Consumer Group的Rebalance
消费者组的4个消费者,消费topic的3个分区,再增加一个消费者,会发生Rebalance吗
发生Consumer的Rebalance有什么后果。
Kafka消费者组的工作原理、Rebalance和Failover
Kafka的数据多副本、高可用性,acks、最小副本数。
当Kafka集群线上有大量消息积压时,该如何处理。
当线上Kafka集群有大量消息积压时,如何加快消费速度。
使用消息队列时,如何确保消息的有序性。
该如何做到并行并且顺序消费Kafka的数据。
如何做到高并发、高吞吐的消费Kafka中数据
Kafka在哪些场景会出现重复消费,该如何处理。
Kafka如何支持点对点模式和发布订阅模式。
Kafka消费数据为什么快之 - mmap技术。
Kafka消费数据为什么会快之sendfile技术。
Kafka的生产和消费数据为什么快。
Kafka生产消息为什么快之顺序读。
在使用Kafka做消息队列的时候,为什么会丢失数据。
如何测试Kafka集群的生产和消费的吞吐量。
什么是Kafka的幂等性,Kafka的事务数据一致性是什么,如何配合分布式事务实现消息的事务支持。
消费服务故障场景下的重试队列该如何实现,如何保证消费数据不重复,不丢失。
消费者的故障感知机制是什么,有哪些核心参数、心跳参数、会话超时以及监控消费过慢机制是什么。
五 KRaft
Raft算法的Leader选举、Failover过程,投票分裂、日志复制、修复不一致的日志以及如何保证数据安全性。
Kafka集群的控制节点由Zookeeper管理到KRaft管理。
KRaft 集群的元数据更新机制是什么。
KRaft 的元数据复制过程是什么样的。
KRaft 的Leader副本选举以及 Failover 过程。
KRaft 集群的元数据快照(Snapshot)机制是什么。
KRaft 的快照如何确保Kafka元数据不丢失。
六 延迟队列
如何基于Kafka实现延时队列。
如何基于Kafka的多层时间轮实现延迟队列。
盘点一下在Broker内部有哪些不同场景下会有延时任务。
Kafka如何基于时间轮,实现分区副本的数据同步。
Kafka的时间轮复用和多层时间轮,相比Netty的时间轮有哪些优势。
基于多层时间轮实现Kafka延迟功能,如何解决时间轮的空转问题。
七 规划设计线上Kafka集群
如何设计规划亿级线上Kafka集群的Broker端参数、生产者参数和消费者参数。
每日几十亿的消息数量,会对Kafka集群造成多大的压力。
如何规划Kafka集群的机器数量、硬盘大小、CPU、内存以及网卡配置。
到底该不该使用SSD硬盘,普通的SAS硬盘能应付吗?
如何设置操作系统的内核参数、JVM以及GC参数、线上机器的经典配置。
测试验证Kafka集群的生产者和吞吐量。
如何优化线上Kafka系统,要做哪些重点内容的监控。
如何优化和监控线上Kafka系统的Broker端压力。
Kafka集群如何做异地灾备,需要做灾备吗,如果做灾备有哪些工具可以使用。
Kafka全链路数据丢失风险分析,如何跟踪线上Kafka集群莫名其妙的丢数据问题。
八 其他相关问题
Kafka的消息过期时间(TTL)该如何实现。
Kafka有没有优先队列,该如何实现优先级队列。
针对链路的故障场景,该如何实现类似于Pulsar的死信队列。
下游系统在计算错误时,该如何进行 消息回溯,消息回溯要主要哪些事项。
该如何监控消息轨迹,有没有必要对Kafka数据做质量监控,主要监控哪些内容,有什么手段。
ZAB(Zookeeper Atomic Broadcast)的工作原理是什么?
Zookeeper集群Leader选举过程是什么。
Zookeeper的Leader节点故障后,如何选出新的Leader。
Zookeeper帮助Kafka管理了哪些内容,为什么说Kafka的Broker节点是无状态的。