kafaka面试题part-2
1、kafka是如何做到高效读写
1)Kafka 本身是分布式集群,可以采用分区技术,并行度高
2)读数据采用稀疏索引,可以快速定位要消费的数据。(mysql中索引多了之后,写入速度就慢了)
3)顺序写磁盘
4)页缓存 + 零拷贝技术
2、Kafka集群中数据的存储是按照什么方式存储的?
Topic 数据的存储机制
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号,例如:first-0。
3、kafka中是如何快速定位到一个offset的。
确定Segment:
- 当需要定位到一个特定的offset时,Kafka首先会根据offset的值确定它所在的segment日志文件。
- 这个过程通常是通过二分查找法来实现的,因为Kafka的segment文件名是按照其中第一条消息的offset来命名的。
计算相对偏移量:
- 一旦确定了segment日志文件,Kafka会计算需要定位的offset在该segment文件中的相对偏移量。
- 这是通过从目标offset中减去segment文件中第一条消息的offset,并加1来得到的。
查找索引文件:
- Kafka会在index索引文件中查找与目标相对偏移量相对应的元数据指针。
- 这个指针指向了log文件中消息的实际物理偏移地址。
读取数据:
- 最后,Kafka会根据找到的元数据指针直接读取log文件中对应偏移量的消息数据。
4、简述kafka中的数据清理策略。
Kafka 中提供的日志清理策略有 delete 和 compact 两种。
1)delete 日志删除:将过期数据删除
log.cleanup.policy = delete 所有数据启用删除策略
(1)基于时间:默认打开。以 segment 中所有记录中的最大时间戳作为该文件时间戳。
(2)基于大小:默认关闭。超过设置的所有日志总大小,删除最早的 segment。
2)compact 日志压缩(合并的意思,不是真的压缩)
compact日志压缩:对于相同key的不同value值,只保留最后一个版本。
5、消费者组和分区数之间的关系是怎样的?
负载均衡:Kafka通过消费者组内的消费者实例来实现负载均衡。当多个消费者实例存在于同一个消费者组中时,Kafka会将主题的不同分区分配给这些消费者实例,以确保每个消费者实例都能处理到一部分数据,从而实现负载均衡。
数据并行处理:由于每个分区都可以被独立地处理和消费,因此Kafka可以利用多个分区来实现数据的并行处理。当消费者组内的消费者实例数量与分区数量相匹配时,每个消费者实例都可以处理一个或多个分区的数据,从而大大提高数据的处理效率。
分区分配策略:Kafka在将分区分配给消费者实例时,会遵循一定的分区分配策略。这些策略包括Range策略、RoundRobin策略、Sticky策略等。这些策略的目的是确保分区能够均匀地分配给消费者实例,同时尽量减少分区的重新分配和数据的重复消费。
消费者数量与分区数量的关系:
- 当消费者数量少于分区数量时,会有部分分区没有被消费者处理,导致数据处理的效率降低。
- 当消费者数量等于分区数量时,每个消费者都可以处理一个分区的数据,实现最佳的负载均衡和数据并行处理效果。
- 当消费者数量多于分区数量时,会有部分消费者处于空闲状态,造成资源的浪费。但这也为系统的扩展性提供了便利,因为当分区数量增加时,可以轻松地增加消费者数量来匹配新的分区数量。
原文地址:https://blog.csdn.net/wadjdkdkdjjd/article/details/143692507
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!