kafka常见面试题与知识点

本文详细解析了Kafka的常见面试题,涵盖了Kafka的设计原理、数据传输事务、节点状态判断、消息存储格式等内容。同时,文章介绍了Kafka的特性,包括高吞吐量、可扩展性、持久性和容错性。此外,还探讨了Kafka的消费者负载均衡策略、数据有序性以及生产者数据分组策略。Kafka在日志收集、消息系统等多个场景下有广泛应用,其核心组件如Replications、Partitions和Leaders的设计也得到了详述,强调了Kafka的高效文件存储设计和核心特性,如消息的可靠性和备份机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、常见面试题

1、什么是kafka

  • kafka是一个分布式消息队列
  • Apache kafka 是一个开源消息系统

2、kafka的设计是什么样的?

  • kafka将消息以topic为单位进行归纳;
  • 将向kafka topic 发布消息的程序称为 producers(生产者);
  • 将预定topic并消费消息的程序称为 consumer(消费者);
  • kafka以集群方式运行,可以由一个或多个服务组成,每一个服务叫一个broker(代理)
  • producers通过网络将消息发送到kafka集群,集群向消费者提供消息

3、数据传输的事务定义有哪三种

  • 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输

    • 先读取消息,然后将offset(偏移量)写入日志文件中,再处理消息,这存在一种可能,就是在存储offset后换没处理消息就crash(崩溃)了,新的consumer从这个offset继续处理
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输

    • 先读取消息,处理消息,最后记录offset,如果在记录offset之前crash,新的consumer就会重复地消费一些消息。
  • 精确的一次:不会漏传也不会重复传输,每个消息有且仅被传输一次,这是大家所期望的。

    • 最简单的做法:将消息的offset和消息被处理后的结果保存在一起。分两个节点
      • 保存了offset后提交一次
      • 消息处理成功后再提交一次

4、kafka判断一个节点是否还活着

  • 节点必须维护和Zookeeper的连接,Zookeeper通过心跳机制检查每个节点的连接
  • 如果节点是个follower(下级),它必须能及时地同步leader(主节点)的写操作,延时不能太久

5、producer 是否直接将数据发送到brokerleader(主节点)?

producer 直接将数据发送到brokerleader,不需要在多个节点进行分发,为了帮助producer做到这店,所有的kafka节点都可以及时的告知:哪些节点是活动的,目标topic目标分区的leader在哪。这样producer就可以直接将消息发送到目的地了。

6、kafka消息采用的是pull模式还是push模式?

kafka消息采用的是pull,它最初考虑的问题是,customer(消费者)应该是从broker拉取消息还brokers将消息推送至customer,也是就pull还是push。在这方面,kafka遵循了一种大部分消息系统共同的传统的设计,producer 将消息推送到brokerconsumerbroker拉取消息。

一些消息系统比如scribeApache Flume 采用push模式,将消息推送到下游的consumer。这样自拍有好处也有坏处:将broker决定消息推送的速率,对于不同消费速率的consumer就不太好处理了。消息系统都致力于让consumer以最大的速率尽快消费消息,但不幸的是,push模式下,当broker推送的速率远大于consumer 消费的速率时,consumer恐怕就要崩溃了。

pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据,可根据自己的消费能力去决定这些策略。

pull有个缺点是,如果broker没有可提供消费的信息,将导致consumer不断在循环中轮询,知道新消息到达。为了避免这店,kafka有个阐述可以让consumer阻塞知道新消息到达。

7、kafka存储在硬盘上的消息格式是什么?

消息由一个固定长度的头部和可变长度的字节数组组成,头部包含了一个版本号和 CRC32校验码

消息长度: 4bytes ( 1 + 4 + n)

  • 1:版本号
  • 4:CRC校验码
  • n:具体的消息

8、kafka高效文件存储设计特点

  • kafkatopic中一个partition大文件分成多个小文件段,通过小文件段,就容易定期清除或删除已消费完文件,减少磁盘占用
  • 通过索引信息可以快速定位message和确定response的最大大小
  • 通过index元数据全部映射到memory,可以避免segment file 的磁盘 IO操作
  • 通过索引文件稀疏存储,可以大幅降低文件元数据占用空间大小。

9、kafka与传统消息系统之间有三个关键区别

  • kafka持久化日志,这些日志可以被重复读取和无限期保留
  • kafka是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性
  • kafka支持实时的流式处理。

10、kafka创建 topic时如何将分区放置到不同的Broker中?

  • 副本因子不能大于broker个数
  • 第一个分区(编号为0)的第一个副本位置是随机从brokerList选择的
  • 其他分区的第一个副本防止位置相对于第0个分区一次往后移。也就是如果我们有5broker5个分区,假设第一个分区放在第4broker上,那么第二个分区将会放在第五个 broker上,第三个分区放第一个第四个第二个,依次类推
  • 剩余的副本相对于第一个副本位置其实是由nextReplicaShift决定的,而这个数也是随机产生的

11、kafka新建的分区会在哪个目录下创建?

在启动kafka集群之前,我们需要配置高log.dirs参数,其值是kafka数据的存放目录,这个参数可以配置多个目录,目录之间是有逗号隔离,通常这些目录是分布在不同磁盘上提高读写性能

当然我们也可以配置log.dir参数,含义一样。只需要设置一个即可。

如果log.dirs参数只配置了一个目录,那么分配到各个broker上的分区肯定只能在这个目录下创建文件夹用于存放数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值