# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。