下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Kafka 知识点整理1. Kafka 的用途有哪些?使用场景如何?使用场景:用户活动跟踪、 传递消息、 收集应用程序和系统度量指标以及日 志、日志聚合、流处理、数据中心。2. 为Kafka 选择硬件从哪些方面进行考虑?磁盘吞吐量:机械硬盘或固态硬盘、磁盘特地的技术等; 磁盘容量:每天产生消息的容量以及消息保留时间; 内存:磁盘性能影响生产者, 而内存影响消费者因为消费者读取的消息会直 接存放在系统的页面缓存中。网络:网络吞吐量决定了 Kafka能够处理的最大数据流量;CPU:Kafka 对 CPU的要求较低。3. 如何考虑一个 Kafka 集群中需要多少 Broker ?一个 Kafka集群
2、需要多少 Broker 取决与以下几个因素: 首先,需要多少磁盘 空间来保留数据,以及单个 broker 有多少可用空间。其次,要考虑集群处理请 求的能力。4. Kafka 中的 ISR、AR又代表什么? ISR 的伸缩又指什么分区中所有的副本统称为 AR,所有与 Leader 副本保持一定程度同步的副本 统称 ISR。与 Leader 同步滞后过多的副本统称 OSR。Kafka在启动的时候会开启 两个与 ISR相关的定时任务,周期性的检测每个分区是否需要缩减其 ISR集合。 当检测到 ISR集合中有失效副本时,就会收缩 ISR集合。当 Follower不断与 Leader 进行消息同步追赶上
3、了 Leader 副本,判断标准是此副本的 LEO是否小于 Leader 副本的 HW。5. Kafka 中的 HW、 LEO、LSO、LW等分别代表什么?HW俗称高水位它标识了一个特定的消息偏移量,消费者只能拉取到该Offset之前的消息。LEO它标识了当前日志文件中下一条待写入消息的 Offset 。LW俗称“低水位”,代表 AR 集合中最小的 logStartOffset 值。副本的拉取请求和 删除消息请求都有可能促使 LW 的增长。logStartOffset :一般情况下, 日志文件的起始偏移量 logStartOffset 等于第 一个日志分段的 baseOffset ,但这并不是
4、绝对的, logStartOffset 的值可以通 过 DeleteRecordsRequest 请求、日志的清理和截断等操作进行修改。LSO特指 LogStableOffset 与 Kafka 的事务有关, isolation.level设置为read_committed 消费者就会忽略事务未提交的消息,即只能消费到 LSO(LastStableOffset) 的位置6. Kafka 中是怎么体现消息顺序性的?Kafka 无法确保整个 topic 中消息的顺序性,但可以保正单个分区内消息的 顺序性。在 Kafka 中默认情况下不指定消息要发往的分区信息,相同 key 的消 息会被发送到指定分
5、区。7. Kafka 中的分区器、序列化器、拦截器是否了解?它们之间的处理顺序是什 么?分区器的作用就是为消息分配分区。序列化器把 ProducerRecord 对象转换 成字节数据组。拦截器是在消息发送前做一些准备工作或发送回调前做一些定 制化的工作。他们的处理顺序拦截器 -序列化器 -分区器8. Kafka 生产者客户端的整体结构是什么样子的?整个生产者客户端由两个线程协调运行, 这两个线程分别是主线程和发送线 程。在主线程中由 KafkaProducer 创建消息,然后通过拦截器、序列化器和分区器的作用之后缓存到消息累加器中。 Sender 线程负责从消息累加器中获取消 息并将其发送到
6、Kafka 中。9. Kafka 生产者客户端中使用了几个线程来处理?分别是什么?整个生产者客户端由两个线程协调运行, 这两个线程分别是主线程和发送线程。10. Kafka 的旧版 Scala 的消费者客户端的设计有什么缺陷?11. “消费组中的消费者个数如果超过 topic 的分区,那么就会有消费者消费不 到数据”这句话是否正确?如果不正确,那么有没有什么 hack 的手段?一般情况 Kafka 中消费者组中的每个消费者只能消费其订阅 topic 的一个分 区数据, Kafka 的独立消费者只分配主题的某个或某几个分区数据。12. 消费者提交消费位移时提交的是当前消费到的最新消息的 offs
7、et 还是 offset+1?消费者提交消费位移时提交的是 offset+113. 有哪些情形会造成重复消费?消费者消费后没有 commit offset( 程序崩溃 / 强行 kill/ 消费耗时 / 自动提交 偏移情况下 unscrible)14. 那些情景下会造成消息漏消费?消费者没有处理完消息 提交 offset( 自动提交偏移 未处理情况下程序异常 结束)15. KafkaConsumer 是非线程安全的,那么怎么样实现多线程消费?1. 在每个线程中新建一个 KafkaConsumer;2. 单线程创建 KafkaConsumer,多个处理线程处理消息(难点在于是否要考 虑消息顺序性
8、, offset 的提交方式)16. 简述消费者与消费组之间的关系消费者从属于消费组,消费偏移以消费组为单位。每个消费组可以独立消费 主题的所有数据,同一消费组内的消费者共同消费主题数据,每个分区只能被 同一消费组内一个消费者消费。17. 当你使用 kafka-topics.sh 创建(删除)了一个 topic 之后, Kafka 背后会 执行什么逻辑?在 Zookeeper 中的 /admin/delete_topics/ 路径下创建一个与待删除主题同 名的节点,以此标记该主题为待删除状态。 KafkaController 会监听 /admin/delete_topics/ 路径下的节点变化
9、, 当监听到有节点变化时就负责接下 去的具体的删除工作。18. topic 的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为 什么?Topic 的分区数可以增加。通过 kafka-topic.sh 脚本的 alert 命令增加。Kafka-topic.sh zookeeper localhost:2181 alert topic topic_demo partitions 319. topic 的分区数可不可以减少?如果可以怎么减少?如果不可以,那又是为 什么?目前 Kafka 只支持增加分区数而不支持减少分区数。原因:会使得代码的复 杂度急剧增大。实现此功能需要考虑的因素很多,比
10、如删除掉的分区中的消息 该作何处理?如果随着分区一起消失则消息的可靠性得不到保障;如果需要保 留则又需要考虑如何保留。直接存储到现有分区的尾部,消息的时间戳就不会 递增,如此对于 Spark、 Flink 这类需要消息时间戳(事件时间)的组件将会受 到影响;如果分散插入到现有的分区中,那么在消息量很大的时候,内部的数 据复制会占用很大的资源, 而且在复制期间, 此主题的可用性又如何得到保障? 与此同时,顺序性问题、事务性问题、以及分区和副本的状态机切换问题都是 不得不面对的。反观这个功能的收益点却是很低,如果真的需要实现此类的功 能,完全可以重新创建一个分区数较小的主题,然后将现有主题中的消息
11、按照 既定的逻辑复制过去即可。20. 创建 topic 时如何选择合适的分区数?创建 topic 时分区数的选择需要从某些角度做具体分析, 根据实际的业务场 景、软件条件、硬件条件和负载情况等做具体的考量。在创建完主题之后,虽 然我们还是能够增加分区的个数,但是基于 key 计算的主题需要严谨对待。当 生产者向 Kafka 中写入基于 key 的消息时,Kafka 通过消息的 key 来计算出消息 将要写入到哪个具体的分区中,这样具有相同 key 的数据可以写入到同一个分 区中。尤其对于与 key 高关联的应用,在创建主题时可以适当地多创建一些分 区,以满足未来的需求。先估算出主题的吞吐量和消
12、费者吞吐量, 可以用主题的吞吐量除以消费者吞 吐量算出分区的个数。21. Kafka 目前有哪些内部 topic ,它们都有什么特征?各自的作用又是什么?Kafka 目前内部有 _consumer_offsets 和 _transaction_state 两个主题, 由 Kafka 自动创建和管理。 _consumer_offsets 存储消费者位移信息, _transaction_state 存储事务状态。22. 优先副本是什么?它有什么特殊的作用?23. Kafka 有哪几处地方有分区分配的概念?简述大致的过程及原理生产者分区分配: 消息在发往 broker 之前是需要确定它所发往的分区的
13、,如果 消息 ProducerRecord 中指定了 partition 字段,那么就不需要分区器的作用, 因为 partition 代表的就是所要发往的分区号。 如果消息 ProducerRecord 中没 有指定 partition 字段,那么就需要依赖分区器,根据 key 这个字段来计算 partition 的值。分区器的作用就是为消息分配分区。如果 key为 null ,那么 消息将会以轮询的方式发往主题内的各个可用分区。消费者分区分配: 在 Kafka 的默认规则中,每一个分区只能被同一个消费组中 的一个消费者消费。消费者的分区分配是指为消费组中的消费者分配所订阅主 题中的分区。 K
14、afka 自身提供了三种策略,分别为 RangeAssignor 、 RoundRobinAssignor 以及 StickyAssignor ,其中 RangeAssignor 为默认的分区 分配策略。broker 端的分区分配: 是指为集群制定创建主题时的分区副本分配方案,即 在哪个 broker 中创建哪些分区的副本。按照机架信息划分成两种策略:未指定 机架信息和指定机架信息。24. 简述 Kafka 分区 Leader 的选举过程。分区 leader 副本的选举由控制器负责具体实施。当创建分区或分区上线的 时候都需要执行 leader 的选举动作,对应的选举策略为 OfflinePar
15、titionLeaderElectionStrategy 。这种策略的基本思路是按照 AR集 合中副本的顺序查找第一个存活,并且这个副本在 ISR 集合中。当分区进行重 分配的时候也需要执行 leader 的选举动作,对应的选举策略为 ReassignPartitionLeaderElectinStrategy 。这种策略的基本思路是按照 AR集 合中副本的顺序查找第一个存活,并且这个副本在 ISR 集合中。当某节点被优 雅地关闭时也需要执行 leader 的选举动作,对应的选举策略为 ControlledShutdownLeaderElectinStrategy 。这种策略的基本思路是按照
16、AR 集合中副本的顺序查找第一个存活,并且这个副本在 ISR 集合中。25. 哪些情况下会触发再均衡?Kafka 中的再均衡是由客户端中的 ConsumerCoordinator 组件和 GroupCoordinator 进行交互完成的。下面几种情形会触发再均衡的操作:有新 的消费者加入消费组;有消费者宕机下线;有消费者主动退出消费组;消费组 所对应的 GroupCoordinator 节点发生了变更; 消费者组所订阅的任一主题或主 题的分区数量发生了变化。26. 简述 Kafka 的日志目录结构Kafka 中的消息以主题为单位进行归类的,各个主题在逻辑上相互独立,每 个主题又可分为一个或多个
17、分区。 每个分区对应一个日志, Log 在物理上以文件 夹<topic>-<partition> 的形式存储。为了防止日志文件过大, Kafka 将日志切 分为多个日志分段( LogSegment),每个 LogSegment对应磁盘上一个日志文件 和两个索引文件,以及可能的其他文件。27. Kafka 中有那些索引文件?Kafka 中每个 LogSegment都对应两个索引文件, 偏移量索引文件 (以 .index 为后缀)和时间戳索引文件(以 .timeindex 为后缀)。每个 LogSegment都以一 个基准偏移量 baseOffset ,用来表示当前 Log
18、Segment中的第一条消息的 offset 偏移量是一个 64 位的长整型数, 日志文件和两个索引文件都是根据基准偏移量 命名的,名称固定长度为 20 位数字,没有达到的位数则用 0 填充。28. 如果我指定了一个 offset , Kafka 怎么查找到对应的消息?首先,将 targetOffset 和每个日志分段文件中的最大偏移量逐一对比,找 到日志分段文件;其次,在索引文件中使用二分法查找不大于 targetOffset 的 最大索引项;然后,从日志分段文件索引项指定的位置出开始查找合适的消息。29. 如果我指定了一个 timestamp ,Kafka 怎么查找到对应的消息?根据根底的
19、时间戳找到不大于该时间戳的最大偏移量, 根据给定的偏移量找 到不大于该偏移量的物理文件位置,从指定的物理文件位置处扫描日志分段文 件来找到合适的消息。30. 聊一聊你对 Kafka 的 Log Retention 的理解Kafka 将消息存储在磁盘中, 为了控制磁盘占用空间的不断增加就需要对消息做 一定的清理操作。 Kafka 提供两种日志清理策略:日志删除( Log Retention ) 和日志压缩 (Log Compaction) 。日志删除有三种方式:基于时间、基于日志大 小和基于日志起始偏移量。基于时间方式:日志删除任务会检查当前日志文件中是否有保留时间超过设定 的阈值来寻找可删除的
20、日志分段文件集合。根据日志分段文件中最大的时间戳 来计算基于日志大小方式:日志删除任务会检查当前日志的大小是否超过设定的阈值 来寻找可删除的日志分段文件集合。首先计算日志文件的总大小 Size 和 RetentionSize 的差值 diff ,然后从日志分段文件中的第一个日志分段开始查 找可删除的日志分段文件集合。基于日志起始偏移量方式:判断某日志分段的下一个日志分段的起始偏移量 baseOffset 是否小于等于 logStartOffset ,若是,则删除此日志分段。31. 聊一聊你对 Kafka 的 Log Compaction 的理解。Log Compaction 对于有相同 Key
21、 的不同 Value 值,只保留最后一个版本。为 了避免当前活跃的日志分段文件成为热点文件, ActiveSegment 不会参与 Log Compaction。32. 聊一聊你对 Kafka 底层存储的理解(页缓存、内核层、块层、设备层)页缓存 是操作系统实现的一种主要的磁盘缓存, 以此用来减少对磁盘 I/O 的 操作。具体来说,就是把磁盘中的数据缓存到内存中,把对磁盘的访问变成对 内存的访问。除了消息顺序追加、页缓存等技术,Kafka 还是用了零拷贝技术进一步提升性能。 零拷贝技术直接将数据从磁盘文件复制到网卡设备中,而不需要经由应用程序 之手,零拷贝技术大大提高了应用程序性能, 减少用户
22、和内核模式之间的切换。33. 聊一聊 Kafka 的延时操作的原理。Kafka 在处理拉取请求时,会先读取一次日志文件,如果收集不到足够多的 消息,那么就会创建一个延时拉取操作( DelayedFetch )以等待拉取到足够数 量的消息。当延时拉取操作执行时,会再读取一次日志文件,然后将拉取结果返回给 follower 副本。延迟操作不只是拉取消息时的特有操作,在 Kafka 中有 多种延时操作,比如延时数据删除、延时生产等。34. 聊一聊 Kafka 控制器的作用Kafka 集群中会有一个或多个 broker ,其中有一个 broker 会被选举为控制 器,它负责管理整个集群所有分区和副本的
23、状态。当某个分区的 Leader 副本出 现故障时,由控制器负责为该分区选举新的 leader 副本。当检测到某个分区的 ISR 集合发生变化时,由控制器负责通知其他 broker 更新其元数据信息。当为 某个 topic 增加分区数时同样还是由控制器负责分区的重新分配。35. Kafka 中分区分配策略有哪些?如何实现自定义的分区分配策略?Kafka 中的分区分配策略有: RangeAssignor 分配策略、 RoundRobinAssignor 分配策略和 StickyAssignor 分配策略。RangeAssignor 分配策略是按照消费者总数和分区总数进行整除运算来获得 一个跨度,
24、如然将分区按照跨度进行平均分配,以保证分区尽可能均匀地分配 给所有的消费者。RoundRobinAssignor 分配策略是将消费者组内的所有消费者及消费者订阅 的所有主题的分区按照字典顺序排序,然后通过轮询的方式逐个将分区依次分 配给每个消费者。StickyAssignor 分配策略: 分区的分配要尽可能均匀, 分区的分配尽可能与 上次分配的保持相同。自定义分区分配策略必须实现 ernals.PartitionAssignor 接口36. 消费再均衡的原理是什么?(提示:消费者协调器和消费组协调器)37. Kafka
25、中的幂等是怎么实现的每个新的生产者实例化时都会被分配一个 PID,对于每个 PID,消息发送到 每个分区都有对应的序列号, 这些序列号从 0开始单调递增。 生产者每发送一条 消息就会将 <PID,Partition> 对应的序列号的值加 1。Broker 端会在内存中为每 对 <PID,Partition> 维护一个序列号,对于收到的每一条消息,只有当它的序列 号的值比 Broker 端中维护的对应的序列号的值大 1 时, broker 才会接收它。38. Kafka 中的事务是怎么实现的39. Kafka 中有那些地方需要选举?这些地方的选举策略又有哪些?Kafka
26、中的选举大致可以分为三大类: 控制器的选举、 分区 leader 的选举以 及消费者相关的选举。控制器的选举: 在 Kafka 集群中会有一个或多个 broker ,其中有一个 broker 会被选举为控制器( Kafka Controller ),它负责管理整个集群中所有分区和 副本的状态等工作。 Kafka Controller 的选举是依赖 Zookeeper 来实现的,在 Kafka 集群中哪个 broker 能够成功创建 /controller 这个临时( EPHEMER)AL节 点他就可以成为 Kafka Controller 。分区 leader 的选举: 分区 leader 副
27、本的选举由 Kafka Controller 负责具 体实施。当创建分区或分区上线的时候都需要执行 leader 的选举动作。基本思 路是按照 AR集合中副本的顺序查找第一个存活的副本, 并且这个副本在 ISR 集 合中。消费者相关的选举: 组协调器 GroupCoordinator 需要为消费组内的消费者 选举出一个消费组的 leader ,随机选取一个消费者作为 Leader 。分区分配策略 的选举根据消费组内的各个消费者投票来决定的40. 失效副本是指什么?有哪些应对措施?在 ISR 集合之外的所有副本统称为失效副本。可以从 JVM、 Borker 负载等方 面进行考虑。41. 多副本下
28、,各个副本中的 HW和 LEO的演变过程42. 为什么 Kafka 不支持读写分离?Kafka 只支持主写主读有几个优点 : 可以简化代码的实现逻辑,减少出错的 可能; 将负载粒度细化均摊,与主写从读相比,不仅负载效能更好,而且对用户 可控; 没有延时的影响 ; 在副本稳定的情况下,不会出现数据不一致的情况。为 此, Kafka 又何必再去实现对它而言毫无收益的主写从读的功能呢 ?43. Kafka 在可靠性方面做了哪些改进?( HW, LeaderEpoch)44. Kafka 中怎么实现死信队列和重试队列?45. Kafka 中的延迟队列怎么实现(这题被问的比事务那题还要多!听说你会 Kafka ,那你说说延迟队列怎么实现?)46. Kafka 中怎么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西河池产业投资集团紧缺人才招聘10人笔试历年备考题库附带答案详解
- 2025广西北投紫云置业有限公司招聘2人笔试历年典型考点题库附带答案详解
- 2025年金延安文化旅游度假区招聘(7人)笔试历年常考点试题专练附带答案详解
- 2025年宿州市祁南工贸有限责任公司招聘6人笔试历年常考点试题专练附带答案详解
- 2025山东铝业有限公司面向中铝集团内部招聘25人笔试历年备考题库附带答案详解
- 2025四川南充临江东方建设集团有限公司招聘11人笔试历年难易错考点试卷带答案解析
- 2025中铁快运郑州分公司招聘98人查看职位笔试历年典型考点题库附带答案详解
- 3月住院医师规范化培训《口腔病理科》模拟试题(附答案解析)
- 2025年广东外语外贸大学新塘实验学校第三方教师招聘备考题库及答案详解(易错题)
- 2025年都兰县妇幼保健和备考题库生育服务中心招聘(编制外)公共卫生专业技术人员的备考题库带答案详解
- 供应链安全管理办法
- 大学数学《实变函数》电子教案
- 2023年常州机电职业技术学院高职单招(英语)试题库含答案解析
- 餐饮服务与管理 课件
- 小学二年级趣味数学(课堂)课件
- 物资仓库消防应急预案范文
- 义务教育(数学)新课程标准(2022年修订版)
- 赣美版(江西)小学四年级美术下全册教案
- 第六章-材料化学固相反应
- 工程部质量停止点检查方案说明
- 中班棉签画PPt
评论
0/150
提交评论