【大数据面试题】(七)Kafka 相关面试题总结2

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【大数据面试题】(七)Kafka 相关面试题总结2


二十一、consumer水平扩展如何实现


kafka支持consumer水平扩展,可以让多个consumer加入一个consumer group,在一个consumer group中,每个分区只能分配给一个consumer,当kafka服务端增加分区数量进行水平扩展后,可以向consumer group中增加新的consumer来提高整个consumer group的消费能力,当consumer group 中的一个consumer出现故障下线时,会通过rebalance操作下线consumer,它负责处理的分区将分配给其他consumer


二十二、消息的顺序


kafka保证一个partition内消息是有序的,但是并不保证多个partition之间的数据有顺序,每个topic可以划分成多个分区,同一个topic下的不同分区包含的消息是不同的,每个消息在被添加到分区时,都会被分配一个offset,它是此消息在分区中的唯一编号,kafka通过offset保证消息在分区内的顺序,offset顺序不跨分区,即kafka只保证在同一个分区内的消息是有序的


二十三、为了避免磁盘被占满,kafka会周期性的删除陈旧的消息,删除策略是什么?


一种是根据消息保留的时间


一种是根据topic存储的数据大小


二十四、什么是日志压缩


在很多场景中,消息的key与value之间的对应关系是不断变化的,消费者只关心key对应的最新value,此时,可以开启kafka的日志压缩功能,kafka会在后台启动一个线程,定期将相同key的消息进行合并,只保留最新的value值。


二十五、同一分区的多个副本包括的消息是否一致?


每个副本中包含的消息是一样的,但是再同一时刻,副本之间并不是完全一样的。


二十六、数据传输的事物定义有哪三种?


数据传输的事务定义通常有以下三种级别:

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

(2)最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输.

(3)精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的


二十七、Kafka判断一个节点是否还活着有哪两个条件?


节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接


如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久


二十八、producer是否直接将数据发送到broker的leader(主节点)?


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


二十九、Kafa consumer是否可以消费指定分区消息?


Kafa consumer消费消息时,向broker发出"fetch"请求去消费特定分区的消息,consumer指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer拥有了offset的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的。


三十、Kafka消息是采用Pull模式,还是Push模式?


Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还push。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息

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

Pull模式的另外一个好处是consumer可以自主决定是否批量的从broker拉取数据。Push模式必须在不知道下游consumer消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免consumer崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull模式下,consumer就可以根据自己的消费能力去决定这些策略

Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。为了避免这点,Kafka有个参数可以让consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发


三十一、Kafka存储在硬盘上的消息格式是什么?


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


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

版本号: 1 byte

CRC校验码: 4 bytes

具体的消息: n bytes


三十二、Kafka高效文件存储设计特点


Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。


通过索引信息可以快速定位message和确定response的最大大小。


通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。


通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。


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


Kafka 持久化日志,这些日志可以被重复读取和无限期保留

Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性

Kafka 支持实时的流式处理


三十四、Kafka创建Topic时如何将分区放置到不同的Broker中


副本因子不能大于 Broker 的个数;

第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;

其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第一个分区放在第四个 Broker 上,那么第二个分区将会放在第五个 Broker 上;第三个分区将会放在第一个 Broker 上;第四个分区将会放在第二个 Broker 上,依次类推;

剩余的副本相对于第一个副本放置位置其实是由 nextReplicaShift 决定的,而这个数也是随机产生的


三十五、Kafka新建的分区会在哪个目录下创建


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

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

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

但是如果 log.dirs 参数配置了多个目录,那么 Kafka 会在哪个文件夹中创建分区目录呢?答案是:Kafka 会在含有分区目录最少的文件夹中创建新的分区目录,分区目录名为 Topic名+分区ID。注意,是分区文件夹总数最少的目录,而不是磁盘使用量最少的目录!也就是说,如果你给 log.dirs 参数新增了一个新的磁盘,新的分区目录肯定是先在这个新的磁盘上创建直到这个新的磁盘目录拥有的分区目录不是最少为止。


三十六、partition的数据如何保存到硬盘


topic中的多个partition以文件夹的形式保存到broker,每个分区序号从0递增,且消息有序

Partition文件下有多个segment(xxx.index,xxx.log)

segment 文件里的 大小和配置文件大小一致可以根据要求修改 默认为1g

如果大小大于1g时,会滚动一个新的segment并且以上一个segment最后一条消息的偏移量命名


三十七、kafka的ack机制


request.required.acks有三个值 0、1、-1:

0:生产者不会等待broker的ack,这个延迟最低但是存储的保证最弱当server挂掉的时候就会丢数据

1:服务端会等待ack值 leader副本确认接收到消息后发送ack但是如果leader挂掉后他不确保是否复制完成新leader也会导致数据丢失

-1:同样在1的基础上 服务端会等所有的follower的副本受到数据后才会受到leader发出的ack,这样数据不会丢失


三十八、Kafka的消费者如何消费数据


消费者每次消费数据的时候,消费者都会记录消费的物理偏移量(offset)的位置

等到下次消费时,他会接着上次位置继续消费

三十八、kafka 的消费者方式?


consumer 采用 pull(拉)模式从 broker 中读取数据。


push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。


对于 Kafka 而言,pull 模式更合适,它可简化 broker 的设计,consumer 可自主控制消费消息的速率,同时 consumer 可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义。


pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中,一直等待数据到达。为了避免这种情况,我们在我们的拉请求中有参数,允许消费者请求在等待数据到达的“长轮询”中进行阻塞。


三十九、消费者负载均衡策略


一个消费者组中的一个分片对应一个消费者成员,他能保证每个消费者成员都能访问,如果组中成员太多会有空闲的成员。


四十、数据有序


  • 一个消费者组里它的内部是有序的
  • 消费者组与消费者组之间是无序的


四十一、kafaka生产数据时数据的分组策略


  • 生产者决定数据产生到集群的哪个partition中
  • 每一条消息都是以(key,value)格式
  • Key是由生产者发送数据传入
  • 所以生产者(key)决定了数据产生到集群的哪个partition


四十二、kafka 数据丢失问题,及如何保证?


kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到。


1)数据丢失


acks=1 的时候(只保证写入 leader 成功),如果刚好 leader 挂了。数据会丢失。

acks=0 的时候,使用异步模式的时候,该模式下 kafka 无法保证消息,有可能会丢


2)brocker 如何保证不丢失


acks=all : 所有副本都写入成功并确认。

retries = 一个合理值。

min.insync.replicas=2 消息至少要被写入到这么多副本才算成功。

unclean.leader.election.enable=false 关闭 unclean leader 选举,即不允许非 ISR 中的副本被

选举为 leader,以避免数据丢失。


3)Consumer 如何保证不丢失


如果在消息处理完成前就提交了 offset,那么就有可能造成数据的丢失。

enable.auto.commit=false 关闭自动提交 offset。处理完数据之后手动提交。


目录
相关文章
|
16天前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
2月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
151 0
|
13天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
2月前
|
消息中间件 存储 缓存
美团面试: Kafka为啥能实现 10Wtps 到100Wtps ?kafka 如何实现零复制 Zero-copy?
40岁老架构师尼恩分享了Kafka如何实现高性能的秘诀,包括零拷贝技术和顺序写。Kafka采用mmap和sendfile两种零拷贝技术,前者用于读写索引文件,后者用于向消费者发送消息,减少数据在用户空间和内核空间间的拷贝次数,提高数据传输效率。此外,Kafka通过顺序写日志文件,避免了磁盘寻道和旋转延迟,进一步提升了写入性能。尼恩还提供了系列技术文章和PDF资料,帮助读者深入理解这些技术,提升面试竞争力。
美团面试: Kafka为啥能实现 10Wtps 到100Wtps ?kafka 如何实现零复制 Zero-copy?
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
42 3
|
2月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
33 2
|
2月前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
56 1
|
2月前
|
消息中间件 存储 Kafka
面试题:Kafka如何保证高可用?有图有真相
面试题:Kafka如何保证高可用?有图有真相
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
14天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
108 7