您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Kafka的面试题有哪些
## 目录
1. [Kafka基础概念](#1-kafka基础概念)
2. [核心组件与架构](#2-核心组件与架构)
3. [生产者与消费者](#3-生产者与消费者)
4. [存储机制与性能优化](#4-存储机制与性能优化)
5. [集群管理与容错](#5-集群管理与容错)
6. [监控与运维](#6-监控与运维)
7. [安全与权限控制](#7-安全与权限控制)
8. [与其他技术对比](#8-与其他技术对比)
9. [场景设计与实战](#9-场景设计与实战)
10. [高级特性与源码](#10-高级特性与源码)
---
## 1. Kafka基础概念
### 1.1 什么是Kafka?
Apache Kafka是一个**分布式流处理平台**,具有高吞吐、低延迟、高可扩展性等特点,主要用于实时数据管道和流应用开发。
### 1.2 Kafka的核心应用场景
- **消息队列**:解耦生产者和消费者
- **日志聚合**:集中处理分布式系统日志
- **流处理**:与Flink/Spark Streaming集成
- **事件溯源**:记录系统状态变更
### 1.3 Kafka与其他消息队列的对比
| 特性 | Kafka | RabbitMQ | RocketMQ |
|---------------|----------------|----------------|----------------|
| 设计目标 | 高吞吐流处理 | 通用消息队列 | 金融级可靠性 |
| 吞吐量 | 100K+/s | 10K+/s | 50K+/s |
| 延迟 | 毫秒级 | 微秒级 | 毫秒级 |
| 消息持久化 | 磁盘存储 | 内存/磁盘 | 磁盘存储 |
---
## 2. 核心组件与架构
### 2.1 Kafka核心组件
- **Broker**:服务节点,组成集群
- **Topic**:消息逻辑分类(如`user_behavior`)
- **Partition**:Topic的物理分片(数据并行单元)
- **Replica**:分区的副本(Leader/Follower)
### 2.2 分区(Partition)设计原理
```java
// 默认分区策略:key的hash值 % 分区数
public int partition(String topic, Object key, byte[] keyBytes,
Object value, byte[] valueBytes, Cluster cluster) {
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
return Math.abs(Utils.murmur2(keyBytes)) % partitions.size();
}
# 确保数据不丢失配置
acks=all
retries=MAX_INT
max.in.flight.requests.per.connection=1
enable.idempotence=true
# 高性能配置
compression.type=snappy
linger.ms=20
batch.size=16384
props.put("enable.auto.commit", "true");
consumer.commitSync();
consumer.commitAsync((offsets, exception) -> {...});
sendfile
系统调用策略 | 说明 | 配置示例 |
---|---|---|
基于时间 | 保留7天 | log.retention.hours=168 |
基于大小 | 分区最大1GB | log.retention.bytes=1G |
Compact策略 | 保留key最新值(适用于KV) | cleanup.policy=compact |
unclean.leader.election.enable=false
(建议)controlled.shutdown
优雅处理类别 | 指标示例 | 告警阈值建议 |
---|---|---|
Broker | UnderReplicatedPartitions | >0 持续5分钟 |
Producer | RequestLatencyAvg | >200ms |
Consumer | Lag | >1000条 |
# 查看Topic详情
kafka-topics.sh --describe --bootstrap-server localhost:9092
# 手动平衡Leader
kafka-leader-election.sh --election-type preferred --all-topic-partitions
# broker配置
listeners=SASL_PLNTEXT://:9092
security.inter.broker.protocol=SASL_PLNTEXT
sasl.mechanism.inter.broker.protocol=PLN
# 授予Producer权限
kafka-acls.sh --add --allow-principal User:producer1 \
--operation WRITE --topic test-topic
维度 | Kafka | Pulsar |
---|---|---|
存储计算耦合 | 紧耦合 | 分离(BookKeeper存储) |
多租户 | 弱支持 | 原生支持 |
消息模型 | 分区级顺序 | 订阅级顺序 |
// 生产者幂等实现
props.put("enable.idempotence", "true");
// 配合事务ID
props.put("transactional.id", "prod-1");
graph LR
Acceptor-->|NIO|Processor1
Acceptor-->|NIO|Processor2
Processor1-->RequestHandler1
Processor2-->RequestHandler2
本文覆盖了从基础概念到高级实现的87个高频面试题,建议结合Kafka官方文档和实际项目经验深入理解。在面试中遇到相关问题时可按照以下结构回答: 1. 明确问题边界(如是否涉及版本差异) 2. 分层回答(原理->配置->实践) 3. 结合场景(举例说明实际应用) “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。