Kafka相关面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka相关面试题相关的知识,希望对你有一定的参考价值。
参考技术A title: Kafka常见问题
date: 2020-04-01 16:25:49
update: 2020-04-01 20:31:30
excerpt: Kafka 面试中常见问题
toc_min_depth: 3
tags:
Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
位置
内容
kafka中的消费者在读取服务端的数据时,需要将服务端的磁盘文件通过网络发送到消费者进程,网络发送需要经过几种网络节点。如下图所示:
传统的读取文件数据并发送到网络的步骤如下:
(1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存;
(2)应用程序将数据从内核空间读入用户空间缓冲区;
(3)应用程序将读到数据写回内核空间并放入socket缓冲区;
(4)操作系统将数据从socket缓冲区复制到网卡接口,此时数据才能通过网络发送。
通常情况下,Kafka的消息会有多个订阅者,生产者发布的消息会被不同的消费者多次消费,为了优化这个流程,Kafka使用了“零拷贝技术”,如下图所示:
“零拷贝技术”只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作。
如果有10个消费者,传统方式下,数据复制次数为4*10=40次,而使用“零拷贝技术”只需要1+10=11次,一次为从磁盘复制到页面缓存,10次表示10个消费者各自读取一次页面缓存。
传统的文件拷贝通常需要从用户态去转到核心态,经过read buffer,然后再返回到用户态的应用层buffer,然后再从用户态把数据拷贝到核心态的socket buffer,然后发送到网卡。
传统的数据传输需要多次的用户态和核心态之间的切换,而且还要把数据复制多次,最终才打到网卡。
如果减少了用户态与核心态之间的切换,是不是就会更快了呢?
此时我们会发现用户态“空空如也”。数据没有来到用户态,而是直接在核心态就进行了传输,但这样依然还是有多次复制。首先数据被读取到read buffer中,然后发到socket buffer,最后才发到网卡。虽然减少了用户态和核心态的切换,但依然存在多次数据复制。
如果可以进一步减少数据复制的次数,甚至没有数据复制是不是就会做到最快呢?
DMA
别急,这里我们先介绍一个新的武器:DMA。
DMA,全称叫Direct Memory Access,一种可让某些硬件子系统去直接访问系统主内存,而不用依赖CPU的计算机系统的功能。听着是不是很厉害,跳过CPU,直接访问主内存。传统的内存访问都需要通过CPU的调度来完成。如下图:
而DMA,则可以绕过CPU,硬件自己去直接访问系统主内存。如下图:
很多硬件都支持DMA,这其中就包括网卡。
零拷贝
回到本文中的文件传输,有了DMA后,就可以实现绝对的零拷贝了,因为网卡是直接去访问系统主内存的。如下图:
Java的零拷贝实现
在Java中的零拷贝实现是在FileChannel中,其中有个方法transferTo(position,fsize,src)。
传统的文件传输是通过java.io.DataOutputStream,java.io.FileInputStream来实现的,然后通过while循环来读取input,然后写入到output中。
零拷贝则是通过java.nio.channels.FileChannel中的transferTo方法来实现的。transferTo方法底层是基于操作系统的sendfile这个system call来实现的(不再需要拷贝到用户态了),sendfile负责把数据从某个fd(file descriptor)传输到另一个fd。
sendfile:
Java的transferTo:
传统方式与零拷贝性能对比
可以看出速度快出至少三倍多。Kafka在文件传输的过程中正是使用了零拷贝技术对文件进行拷贝。建议以后多用FileChannel的transferTo吧。
总结
需要用到的类:
KafkaProducer :需要创建一个生产者对象,用来发送数据
ProducerConfig :获取所需的一系列配置参数
ProducerRecord :每条数据都要封装成一个ProducerRecord对象
几个比较重要的配置项
//kafka集群,broker-list
props.put("bootstrap.servers", "hadoop102:9092");
查漏补缺:备战2021年java后端Kafka高频面试题(含答案解析)
前言
Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景。此外,在这个时代拥有kafka知识是一条快速增长的道路
而且无论是作为面试官,还是应聘者,我都接触过很多Kafka面试题。而在最近面试了很多候选人,发现写了熟悉Kafka,但是对于Kafka相关的知识却是只知道大概用处,简单搭建和使用。我想说,虽然我们是SRE(可靠性工程师),但不论你是业务层的SRE还是基础设施层的SRE,我们都需要对业务方的使用场景有足够理解,或者对我们要提供的服务有足够的了解才行,这样你才能整体的保证你的业务连续性以及业务可靠性。
因此如果您希望参加Apache Kafka面试,这是一份不错的指南。这将有助于您成功参加Kafka面试。
文章有些长,每题都附带了答案解析,希望你们看了能够有所收获,同时觉得不错的朋友可以转发支持下和关注下我,以后还会有更多精选文章分享给大家!获取点这里进Java交流群自行下载
一、最佳Apache Kafka面试问题和解答:
主要介绍Kafka在项目中最常使用的一些功能点,旨在带领学习者快速掌握Kafka在开发时需要的知识点,能够把Kafka相关技术运用到实际项目架构中去。
- 什么是Apache Kafka?
- Kafka中有哪几个组件?
- 解释偏移的作用?
- 什么是消费者组?
- ZooKeeper在Kafka中的作用是什么?
- 没有ZooKeeper可以使用Kafka吗?
- Kafka的主要API有哪些?
- 什么是消费者或用户?
二、进阶篇:比较棘手的Kafka面试问题和答案
主要是介绍Kafka在项目中拔高一些的技术点
- 解释领导者和追随者的概念?
- 是什么确保了Kafka中服务器的负载平衡?
- 副本和ISR扮演什么角色?
- 为什么Kafka的复制至关重要?
- 如果副本长时间不在ISR中,这意味着什么?
- 启动Kafka服务器的过程是什么?
- 在生产者中,何时发生QueueFullException?
- 解释Kafka Producer API的作用?
- Kafka和Flume之间的主要区别是什么?
- Apache Kafka是分布式流处理平台吗?如果是,你能用它做什么?
三、高阶篇高级Kafka面试问题
该部分以Kafka项目为主线,实际运用为主
- 你能用Kafka做什么?
- 在Kafka集群中保留期的目的是什么?
- 解释Kafka可以接收的消息最大为多少?
- 传统的消息传递方法有哪些类型?
- ISR在Kafka环境中代表什么?
- 什么是Kafka中的地域复制?
- 解释多租户是什么?
- 消费者API的作用是什么?
- 解释流API的作用?
- 连接器API的作用是什么?
- 解释生产者是什么?
- 比较RabbitMQ与Apache Kafka
- 比较传统队列系统与Apache Kafka
- 为什么要使用Apache Kafka集群?
四、基于特征的Kafka面试问题
- Kafka的一些最显著的应用。
- Kafka流的特点。
- Kafka的流处理是什么意思?
- 系统工具有哪些类型?
- 什么是复制工具及其类型?
- Java在Apache Kafka中的重要性是什么?
- 说明Kafka的一个最佳特征。
- 解释术语“主题复制因子”。
最后:
最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer!
点击进Java架构资源交流群 ,找管理员获取哦-!
以上是关于Kafka相关面试题的主要内容,如果未能解决你的问题,请参考以下文章