Kafka经典面试问题
基础概念
-
什么是Apache Kafka?它的主要用途是什么?
- Kafka是一个分布式流处理平台,用于构建实时数据管道和流应用程序。主要用途包括消息系统、活动跟踪、日志聚合、流处理等。
-
Kafka与传统消息队列(如RabbitMQ)有什么区别?
- Kafka设计用于高吞吐量、持久化、分布式场景,支持多订阅者;RabbitMQ更适合低延迟、复杂路由的场景。
-
解释Kafka中的Topic、Partition和Broker概念
- Topic:消息的类别或主题
- Partition:Topic的物理分组,一个Topic可以分为多个Partition
- Broker:Kafka集群中的单个服务器节点
核心机制
-
Kafka如何保证消息的顺序性?
- 在Partition级别保证消息的顺序性,同一Partition内的消息是有序的。
-
解释Kafka的副本机制(Replication)
- 每个Partition有多个副本,分为Leader和Follower。Leader处理所有读写请求,Follower从Leader同步数据。
-
什么是ISR(In-Sync Replica)?
- 与Leader保持同步的副本集合,只有ISR中的副本才有资格被选为新的Leader。
-
Kafka如何实现高吞吐量?
- 顺序I/O、批量发送、零拷贝技术、分区并行处理等。
生产者相关
-
Kafka生产者如何保证消息不丢失?
- 设置acks=all、retries>0、使用同步发送或回调确认。
-
acks参数有哪些可选值?分别代表什么含义?
- 0:不等待确认
- 1:等待Leader确认
- all(-1):等待所有ISR副本确认
-
什么是幂等生产者(Idempotent Producer)?
- 确保消息只被精确写入一次,通过生产者ID(PID)和序列号实现。
消费者相关
-
解释消费者组(Consumer Group)的概念
- 一组消费者共同消费一个Topic,每个Partition只能被组内的一个消费者消费。
-
Kafka如何实现消费者组的Rebalance?
- 当消费者加入或离开组时,触发重新分配Partition给消费者的过程。
-
什么是消费者偏移量(Offset)?Kafka如何管理Offset?
- Offset表示消费者在Partition中的消费位置,可存储在Kafka(__consumer_offsets)或外部系统。
-
解释"至少一次"、"至多一次"和"精确一次"语义的区别
- 至少一次:消息可能被重复消费
- 至多一次:消息可能丢失
- 精确一次:消息恰好被处理一次
运维与调优
-
如何选择合适的分区数量? - 考虑吞吐量需求、消费者数量、未来扩展等因素,通常建议从较少分区开始,按需增加。
-
Kafka的性能监控指标有哪些?
- 消息吞吐量、请求延迟、磁盘I/O、网络流量、ISR变化等。
-
如何解决Kafka集群中的不平衡问题?
- 使用kafka-reassign-partitions工具重新分配分区。
-
解释Kafka的日志压缩(Log Compaction)
- 保留每个Key的最新值,适用于需要精确恢复状态的场景。
高级特性
-
Kafka Streams与普通消费者有什么区别?
- Kafka Streams是一个流处理库,提供状态管理、窗口操作等高级功能。
-
什么是Kafka Connect?
- 用于Kafka与其他系统间可扩展、可靠的流数据传输的工具。
-
解释Kafka的事务机制
- 允许跨多个Partition的原子性写入,常用于"精确一次"处理语义。
-
Kafka如何与Zookeeper交互?
- Kafka使用Zookeeper进行集群协调、领导者选举、配置管理等(Kafka 2.8+开始支持不依赖Zookeeper的模式)。
这些问题涵盖了Kafka的核心概念和实际应用场景,准备这些问题可以帮助你在面试中展示对Kafka的深入理解。