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相关技术运用到实际项目架构中去。

  1. 什么是Apache Kafka?
  2. Kafka中有哪几个组件?
  3. 解释偏移的作用?
  4. 什么是消费者组?
  5. ZooKeeper在Kafka中的作用是什么?
  6. 没有ZooKeeper可以使用Kafka吗?
  7. Kafka的主要API有哪些?
  8. 什么是消费者或用户?
    在这里插入图片描述
    在这里插入图片描述

二、进阶篇:比较棘手的Kafka面试问题和答案

主要是介绍Kafka在项目中拔高一些的技术点

  1. 解释领导者和追随者的概念?
  2. 是什么确保了Kafka中服务器的负载平衡?
  3. 副本和ISR扮演什么角色?
  4. 为什么Kafka的复制至关重要?
  5. 如果副本长时间不在ISR中,这意味着什么?
  6. 启动Kafka服务器的过程是什么?
  7. 在生产者中,何时发生QueueFullException?
  8. 解释Kafka Producer API的作用?
  9. Kafka和Flume之间的主要区别是什么?
  10. Apache Kafka是分布式流处理平台吗?如果是,你能用它做什么?
    在这里插入图片描述

三、高阶篇高级Kafka面试问题

该部分以Kafka项目为主线,实际运用为主

  1. 你能用Kafka做什么?
  2. 在Kafka集群中保留期的目的是什么?
  3. 解释Kafka可以接收的消息最大为多少?
  4. 传统的消息传递方法有哪些类型?
  5. ISR在Kafka环境中代表什么?
  6. 什么是Kafka中的地域复制?
  7. 解释多租户是什么?
  8. 消费者API的作用是什么?
  9. 解释流API的作用?
  10. 连接器API的作用是什么?
  11. 解释生产者是什么?
  12. 比较RabbitMQ与Apache Kafka
  13. 比较传统队列系统与Apache Kafka
  14. 为什么要使用Apache Kafka集群?
    在这里插入图片描述
    在这里插入图片描述

四、基于特征的Kafka面试问题

  1. Kafka的一些最显著的应用。
  2. Kafka流的特点。
  3. Kafka的流处理是什么意思?
  4. 系统工具有哪些类型?
  5. 什么是复制工具及其类型?
  6. Java在Apache Kafka中的重要性是什么?
  7. 说明Kafka的一个最佳特征。
  8. 解释术语“主题复制因子”。
    在这里插入图片描述

最后:

最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer!

点击进Java架构资源交流群 ,找管理员获取哦-!在这里插入图片描述

以上是关于Kafka相关面试题的主要内容,如果未能解决你的问题,请参考以下文章

Kafka面试题全套整理 | 划重点要考!

kafka面试题1

kafka面试题1

kafka面试题

kafka面试题

kafka面试题