大数据面试(Kafka面试真题-卷二)

大数据面试(Kafka面试真题)

  • 1、Kafka分区容错性?
  • 2、Kafka的IOSR和ACK介绍,ACK分别有几种值?
  • 3、Kafka的工作原理?
  • 4、Kafka如何保证全局有序?
  • 5、Kafka为什么同一个消费者组的消费者不能消费相同的分区?
  • 6、Kafka支持什么语义,怎么实现ExactlyOnce?
  • 7、为什么需要消费者组?
  • 8、Kafka producer的写入数据过程?
  • 9、Kafka读取消息是推还是拉的模式?有什么好?
  • 10、说下Kafka中的Partition?

1、Kafka分区容错性?

  1. 副本机制:Kafka允许创建多个分区的副本,并将这些副本分布在不同的Broker上。每个分区都有一个领导副本和若干个追随者副本。领导副本负责处理读写请求,而追随者副本则被用于数据冗余和故障转移。如果领导副本宕机,Kafka会自动从追随者副本中选举出新的领导副本,从而保证数据的可用性和持久性。
  2. 数据复制:Kafka适用异步复制机制来保证数据的可靠性。当消息被写入到领导副本时,Kafka会将其异步复制到追随者副本。只有当消息被成功复制到所有的副本后,写入操作才会被认为是完成的。这种机制可以避免数据丢失,并提高系统的吞吐量。
  3. ISR机制:Kafka适用ISR(同步复制副本)机制来保证副本之间的一致性。只要处于ISR集合中的副本才被认为是处于同步状态,可以成为新的领导副本。如果某个副本无法及时复制消息或者落后于其它副本太多,它将被从ISR集合中移除,直到追赶上其它副本的进度。这种机制可以防止由于副本之间的不一致导致的数据丢失问题。
  4. 故障转移当某个Broker宕机或者分区的领导副本不可用时,Kafka会自动进行故障转移。它会从ISR集合中选择一个新的副本作为领导副本,并自动将客户端的消费者重定向到新的副本上。这种机制使得Kafka在面对故障时能够快速恢复,并保持高可用性。

2、Kafka的IOSR和ACK介绍,ACK分别有几种值?

OSR:是指Out-of-Sync Replicas,是指与leader副本失去同步的副本集合。当ISR中的副本失去与leader副本的同步,它们将被移动到OSR中,直到重新与leader副本同步。

ACK:是指Ackowledgement,用于控制生产者发送消息时的可靠性和性能。ACK有三个可选值:

  1. ACK=0生产者不等待任何确认,将消息发送到Kafka后即认为发送成功,适用于对可靠性要求不高的场景。
  2. ACK=1生产者等待leader副本成功写入消息后即认为发送成功,适用于对可靠性要求较高的场景。
  3. ACK=all生产者等待ISR中所有副本成功写入消息后即认为发送成功,适用于对数据不可丢失的高可靠性要求场景。

3、Kafka的工作原理?

  1. 消息发布和订阅:Kafka通过主题(topic)来组织消息,生产者将消息发布到指定的主题,而消费者则订阅一个或多个主题来消费消息。
  2. 分区和复制:每个主题可以被划分为多个分区(partition),每个分区都是有序的消息日志。分区的目的是实现可伸缩性和并行处理。每个分区可以有多个副本(replica),用于提供数据的冗余和容错性。
  3. 持久化和顺序写:Kafka使用顺序写磁盘的方式来持久化消息,这样可以提高写入性能。消息被写入到分区的末尾,并根据其在分区的偏移量进行唯一标识。
  4. 消费者组:消费者可以以消费者组的形式进行协调消费。同一个消费者组中的消费者共同消费一个主题的所有分区,每个分区只能由一个消费者消费。这样可以实现负载均衡和容错性。
  5. 批量拉取和零拷贝:Kafka的消费者可以批量拉取消息,减少网络传输开销。同时,Kafka还是用零拷贝技术,将消息从磁盘读取到内存,再通过网络发送给消费者,避免了数据的多次拷贝。
    零拷贝技术:当消息从Kafka的日志文件发送到消费者时,Kafka利用零拷贝技术直接从文件系统缓存将数据传输到网络套接字,避免了将数据从内核空间拷贝到用户空间再拷贝回内核空间的过程。
  6. 消息保留和清理:Kafka可以根据时间或者大小来配置消息的保留策略。过期的消息会被自动清理,释放磁盘空间。

4、Kafka如何保证全局有序?

Kafka通过分区和分区内的顺序保证全局有序。
具体来说,Kafka将数据分为多个主题(topics),每个主题可以分为多个分区(partitions)。每个分区都有一个唯一的标识符,并且在Kafka集群中的多个节点上进行复制以提供高可用性。
在每个分区内,Kafka使用偏移量(offset)来标识消息的顺序。生产者将消息写入特定的分区时,Kafka会为每个消息分配一个递增的偏移量。消费者可以通过指定分区和偏移量来读取消息,从而保证消费者按照指定顺序处理消息。
如果某个主题只有一个分区,那么该主题的消息顺序是全局有序的如果一个主题有多个分区,Kafka可以根据消息的键(key)来选择将消费写入哪个分区。这样,具有相同键的消息将被写入同一个分区, 并且同一个分区内的消息顺序是有序的。但是,不同分区之间的消息顺序是无法保证的。

5、Kafka为什么同一个消费者组的消费者不能消费相同的分区?

Kafka中同一个消费者组的消费者不能消费相同的分区,是因为Kafka采用了分布式的消息队列模型,通过将消息分散存储在多个分区中来提高消息的处理能力和可靠性。每个分区只能由同一个消费者组中的一个消费者进行消费,这样可以确保消息的有序性和不重复消费

6、Kafka支持什么语义,怎么实现ExactlyOnce?

Kafka支持三种消息传递语义:At Most Once、At Least Once和Exactly Once。
要实现Exactly Once语义,Kafka使用了以下两个主要组件:

  1. 生产者端生产者在发送消息之前会生成一个唯一的消息ID,并将其与消息一起发送到Kafka。Kafka会根据消息ID来判断是否是重复的消息。生产者还需要将消息写入事务日志,并在确认写入事务日志后才将消息发送到Kafka。如果写入事务日志失败,则不会发送消息到Kafka。
  2. 消费者端消费者在接收到消息后,会将消息的偏移量和消费者组ID一起提交到Kafka。Kafka会将偏移量和消费者组ID存储在一个特殊的主题中,以便在发生故障时能够恢复消费的状态。消费者还需要将消费的结果写入事务日志,并在确认写入事务日志后才提交偏移量到Kafka。如果写入事务日志失败,则不会提交偏移量。
    通过使用事务日志和唯一的消息ID,Kafka可以确保消息在发送和消费过程中的幂等性,并最终实现Exactly Once语义。

7、为什么需要消费者组?

Kafka的消费者是指使用Kafka消费消息的应用程序。消费者组是一组相同group.id的消费者的集合。每个消费者组中的消费者协同工作,以协调消息的消费。
消费者组的存在有以下几个原因:

  1. 并行处理通过将消费者组中的消费者分配到不同的分区上,可以实现消息的并行处理。每个分区只会被同一个消费者组中的一个消费者处理。这样可以提高消息处理的吞吐量。
  2. 容错性消费者组中的消费者可以相互备份,当其中一个消费者出现故障或不可用时,其它消费者可以接管其分区并继续消费。这种容错性能够确保消息的连续性和可靠性。
  3. 消费者动态扩展通过添加更多的消费者到消费者组中,可以实现消费能力的动态扩展。这样可以根据复制的变化动态调整消费者的数量。

8、Kafka producer的写入数据过程?

  1. 创建ProducerRecord:首先,开发者需要创建一个ProducerRecord对象,该对象包含了要发送的消息的主题、键和值等信息
  2. 序列化消息:ProducerRecord中的键和值需要被序列化为字节数组,以便能够在网络上传输。
  3. 分区选择:根据配置的分区策略,Kafka producer会选择一个分区来发送消息。如果开发者没有指定分区,那么会根据键的哈希值选择一个分区。
  4. 消息发送:Kafka produer将序列化后的消息发送给选定的分区的Leader副本
  5. 消息写入磁盘Leader副本将消息写入磁盘,并向producer发送确认消息
  6. 消息复制Leader副本将消息复制到其它的follower副本,以确保消息的可靠性。
  7. 消息提交当消息被所有的follower副本确认接收后,Leader副本会向producer发送确认消息
  8. 异常处理:如果发送过程中发生了错误,比如网络错误或Leader副本失效,Kafka producer会根据配置重试策略进行重试,直到发送成功或达到最大重试次数。

9、Kafka读取消息是推还是拉的模式?有什么好?

Kafka的消息读取是拉模式(pull mode),即消费者主动从Kafka服务器拉取消息。这与推模式(push mode)相反,推模式是服务器将消息直接推送给消费者

拉模式的好处有以下几点:

  1. 灵活性:消费者可以根据自身的处理能力和需求决定拉取消息的速率,可以根据实际情况动态调整。
  2. 节约资源:由于消费者主动拉取消息,可以避免服务器主动推送大量消息给消费者,减少网络带宽和服务资源的消耗。
  3. 容错性:消费者可以根据需要重新拉取消息,例如在处理过程中出现错误,可以重新拉取相同的消息进行重试。
  4. 消息积压控制:消费者可以根据自身的处理能力调整拉取消息的速率,避免由于消息过多而导致的消息积压问题。

10、说下Kafka中的Partition?

Kafka中的Partition(分区)是将主题(Topic)划分为多个独立的数据片段的过程。每个Partition是一个有序、不可变的消息序列,其中的消息按照Producer的发送顺序一次追加到Partition中。每个Partition在物理上对应一个独立的日志文件,这个文件被分成多个Segment(段)

Partition的作用在于:

  1. 实现消息的水平扩展:Kafka可以在多个Broker上并行处理不同Partition的消息,提高了整个系统的吞吐量。
  2. 实现数据的持久化:每个Partition都会被复制到多个Broker上,确保数据的可靠性和冗余。
  3. 实现消息的顺序性:在同一个Partition中,消息的顺序是有序的,保证了消息的有序性处理。

每个Partition都有一个唯一的标识符(Partition ID),并且可以配置多个副本(Replica),其中一个为Leader副本,其它副本为Follower副本。Leader副本负责处理来自Producer和Consumer的请求,Follower副本用于备份和故障转移。
在生产者发送消息时,可以选择指定消息要发送到的Partition,如果没有指定,Kafka会根据某种策略(如Hash值)将消息平均分配到各个Partition中。而在消费者消费消息时,可以订阅一个或多个Partition,每个消费者只会消费其中一个Partition上的消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.Java并发编程—深入剖析Java Executors:探索创建线程的5种神奇方式

Executors快速创建线程池的方法 Java通过Executors 工厂提供了5种创建线程池的方法,具体方法如下 方法名描述newSingleThreadExecutor()创建一个单线程的线程池,该线程池中只有一个工作线程。所有任务按照提交的顺序依次执行,保证任务的顺序性…

现代化的轻量级Redis桌面客户端Tiny RDM

​欢迎光临我的博客查看最新文章: https://river106.cn 1、简介 Tiny RDM(全称:Tiny Redis Desktop Manager)是一个界面现代化的轻量级Redis桌面客户端,支持Linux、Mac和Windows。它专为开发和运维人员设计,使得与Red…

python coding with ChatGPT 打卡第22天| 二叉搜索树的操作:插入、删除、修剪、转换

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…

SpringBoot集成对象存储服务Minio

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从…

IP数据报格式

每一行都由32位比特,即4个字节组成,每个格子称为字段或者域。IP数据报由20字节的固定部分和最大40字节的可变部分组成。 总长度 总长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度数据载荷长度)最大…

基于java+springboot+vue实现的停车场管理系统(文末源码+Lw)23-258

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统停车场管理系统信息管理难度大,容错率低&…

【Axure高保真原型】下拉列表切换图表

今天和大家分享通过下拉列表动态切换统计图表的原型模板,我们可以通过下拉列表选择要显示的图表,包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图;而且图表数据可以在左侧表格中动态维护,包括增加修改…

《你是什么垃圾-弹幕版》

你是什么垃圾-弹幕版 类型:垃圾分类 视角:2d 乐趣点:弹幕交互,热点追踪 时间:2021 个人职责: 所有程序部分的设计开发 此游戏是某个早晨,在早点铺子吃米线的时候构思出来的。当时正是&#xff0…

bpmn-js系列之Viewer

上一篇文章『bpmn-js系列之Modeler、以及流程编辑界面的优化』介绍了bpmn-js的modeler模式下的一些开发配置,这篇文章将会介绍Viewer模式的使用 以下演示代码基于上一节搭建好的vue环境,使用bpmn版本为当前最新版7.3.0 基本使用 Viewer的使用与Modele…

【基础CSS】

本文章属于学习笔记&#xff0c;在https://www.freecodecamp.org/chinese/learn/2022/responsive-web-design/中练习 二、 CSS 样式&#xff0c;新建一个文件.css&#xff0c;该文件不含有style标签 <style>. h1&#xff0c;h2&#xff0c;p{ text-align&#xff1a;ce…

Android 优化

布局优化: 减少布局层级&#xff0c;使用ViewStub提高显示速度&#xff0c;布局服用&#xff0c;尽可能少使用warp_content&#xff0c;删除空间中无用的属性,避免过度绘制移除window默认背景&#xff0c;按需显示展位图&#xff0c;自定义View优化&#xff0c;使用canvas.clip…

mysql57开启biglog并查看biglog保姆级教程

目录 详细步骤 1.修改mysql配置文件 2.重启mysql 3.操作数据库 4.查看binglog 4.1mysqlbinlog示例: 4.2mysqlbinlog将biglog写入文件示例: 4.2.1biglog中创建表示例: 4.2.2插入示例 4.2.3更新示例 详细步骤 1.修改mysql配置文件 vi /etc/my.cnf [mysqld]下增加如下…

Skywalking(9.7.0) 告警配置

图片被吞&#xff0c;来这里看吧&#xff1a;https://juejin.cn/post/7344567669893021736 过年前一天发版&#xff0c;大家高高兴兴准备回家过年去了。这时候老板说了一句&#xff0c;记得带上电脑&#xff0c;关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…

C++初阶

1.缺省参数 给缺省参数的时候&#xff0c;不能声明&#xff0c;定义同时给&#xff0c;只能声明的时候给缺省参数&#xff0c;同时给程序报错&#xff1b; 2.函数重载 C语言不允许同名函数的存在&#xff0c;函数名不能相同&#xff0c;C引入函数重载&#xff0c;函数名可以…

IDEA启动时,电脑非常的卡

选择Help -> Change memory Settings 把启动内存调大一点就行了&#xff0c;反正要超过你平时使用IDEA时使用到的内存大小就行。 原因解释&#xff1a; JVM在运行时会回收新生代和老年代的垃圾&#xff0c;新生代无法回收的对象&#xff0c;比如&#xff1a;回收15次都没有…

什么是递归组件?

递归组件是指在Vue.js中&#xff0c;组件内部直接或间接地引用自身的情况。通过递归组件&#xff0c;可以实现树形结构、评论列表、菜单等具有层级关系的数据展示。 在使用递归组件时&#xff0c;需要注意以下几点&#xff1a; 定义方式&#xff1a;在Vue组件中&#xff0c;可…

2024华为OD机考面试经验分享

什么是华为OD&#xff1f; 华为OD因为还是外包性质&#xff0c;相对正编来说要轻松一些。&#xff08;前提是你不想去卷A绩效&#xff09;&#xff0c;一般情况可以八九点就溜下班。然后工作环境的话&#xff0c;和正编一样。 很多小伙伴其实都是从大城市想回老家&#xff0c…

希尔排序的应用场景

下面是一个简单的希尔排序的代码实现&#xff0c;使用Python语言&#xff1a; def shell_sort(arr):n len(arr)gap n // 2 # 初始化间隔# 间隔逐渐减小while gap > 0:for i in range(gap, n):temp arr[i]j i# 插入排序的步骤while j > gap and arr[j - gap] > t…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

摘要&#xff1a;开发农作物害虫检测系统对于提高农业生产效率和作物产量具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个农作物害虫检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0…

密码校验规则(不能包含3个及以上字典、键盘连续字符)

需求 1、长度大于8&#xff0c;且小于32 2、不能包含用户名 3、不能包含连续3位及以上相同字母或数字 4、不能包含3个及以上字典连续字符 4、数字、小写字母、大写字母、特殊字符&#xff0c;至少包含三种 package com.yy.springboottest.util;/*** author ode* create 2024-03…