# Kafka的知識點匯總
## 目錄
1. [Kafka核心概念](#一kafka核心概念)
- 1.1 [消息系統基礎](#11-消息系統基礎)
- 1.2 [Kafka架構組件](#12-kafka架構組件)
2. [安裝與配置](#二安裝與配置)
- 2.1 [單機部署](#21-單機部署)
- 2.2 [集群部署](#22-集群部署)
3. [生產者與消費者](#三生產者與消費者)
- 3.1 [消息生產流程](#31-消息生產流程)
- 3.2 [消費者組機制](#32-消費者組機制)
4. [Topic與Partition](#四topic與partition)
- 4.1 [分區策略](#41-分區策略)
- 4.2 [副本機制](#42-副本機制)
5. [高級特性](#五高級特性)
- 5.1 [事務支持](#51-事務支持)
- 5.2 [消息壓縮](#52-消息壓縮)
6. [性能優化](#六性能優化)
- 6.1 [硬件配置建議](#61-硬件配置建議)
- 6.2 [JVM調優](#62-jvm調優)
7. [監控與管理](#七監控與管理)
- 7.1 [常用監控指標](#71-常用監控指標)
- 7.2 [運維工具](#72-運維工具)
8. [FAQ](#八faq)
---
## 一、Kafka核心概念
### 1.1 消息系統基礎
**消息隊列(Message Queue)** 是分布式系統中實現異步通信的核心組件,主要解決:
- 應用解耦
- 流量削峰
- 異步處理
Kafka作為**分布式流處理平臺**,具有以下特性:
- 高吞吐量(單機可達百萬級TPS)
- 低延遲(毫秒級)
- 持久化存儲(基于磁盤)
- 水平擴展能力
### 1.2 Kafka架構組件
| 組件 | 功能描述 |
|--------------|--------------------------------------------------------------------------|
| **Broker** | Kafka服務節點,負責消息存儲和轉發 |
| **Topic** | 邏輯上的消息分類,實際物理存儲分為多個Partition |
| **Producer** | 消息生產者,通過push模式發布消息 |
| **Consumer** | 消息消費者,通過pull模式訂閱消息 |
| **Zookeeper**| 負責集群元數據管理和控制器選舉(Kafka 2.8+開始支持不依賴ZK的KRaft模式) |
---
## 二、安裝與配置
### 2.1 單機部署
```bash
# 下載二進制包
wget https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz
# 解壓并啟動
tar -xzf kafka_2.13-3.3.1.tgz
cd kafka_2.13-3.3.1
# 啟動Zookeeper(生產環境建議獨立部署)
bin/zookeeper-server-start.sh config/zookeeper.properties &
# 啟動Kafka
bin/kafka-server-start.sh config/server.properties
關鍵配置項(server.properties
):
broker.id=1 # 必須唯一
listeners=PLNTEXT://hostname:9092
log.dirs=/data/kafka-logs
num.partitions=3 # 默認分區數
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
// 生產者示例代碼
Properties props = new Properties();
props.put("bootstrap.servers", "kafka1:9092");
props.put("acks", "all"); // 消息確認機制
props.put("retries", 3);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("my-topic", "key", "value"));
策略 | 描述 | 適用場景 |
---|---|---|
Round Robin | 均勻分配到所有分區 | 無消息順序要求 |
Key Hashing | 相同Key總是路由到固定分區 | 需要保證消息順序 |
Custom Partitioner | 自定義分區邏輯 | 特殊業務需求 |
副本放置策略:
Broker 1: Partition0(Leader), Partition1(Follower)
Broker 2: Partition1(Leader), Partition2(Follower)
Broker 3: Partition2(Leader), Partition0(Follower)
保證跨分區的原子性寫入:
props.put("enable.idempotence", "true");
props.put("transactional.id", "my-transaction-id");
producer.initTransactions();
try {
producer.beginTransaction();
producer.send(record1);
producer.send(record2);
producer.commitTransaction();
} catch (Exception e) {
producer.abortTransaction();
}
支持的壓縮算法: - gzip(壓縮率高但CPU開銷大) - snappy(平衡型) - lz4(低延遲)
配置方式:
compression.type=snappy
資源類型 | 推薦配置 |
---|---|
CPU | 16核以上(建議SSD場景) |
內存 | 32GB+(堆內存不超過14GB) |
磁盤 | SSD RD10,預留50%空間 |
網絡 | 萬兆網卡 |
# 建議G1垃圾回收器
export KAFKA_HEAP_OPTS="-Xms12g -Xmx12g -XX:+UseG1GC"
# 查看Topic列表
bin/kafka-topics.sh --list --bootstrap-server kafka1:9092
# 創建Topic(3分區2副本)
bin/kafka-topics.sh --create --topic orders \
--partitions 3 --replication-factor 2 \
--bootstrap-server kafka1:9092
# 查看消費者偏移量
bin/kafka-consumer-groups.sh --describe \
--group my-group --bootstrap-server kafka1:9092
Q1: Kafka為什么快? - 順序I/O + 零拷貝技術 - 批處理與壓縮 - 分區并行處理
Q2: 如何保證消息不丟失?
- 生產者:設置acks=all
+ 重試
- Broker:min.insync.replicas=2
- 消費者:手動提交offset
Q3: 如何實現精確一次消費? - 啟用冪等生產者 - 配合事務機制 - 消費者使用read_committed隔離級別
本文檔持續更新,最后修訂時間:2023年10月
推薦學習資源:
- 《Kafka權威指南》
- 官方文檔:https://kafka.apache.org/documentation/ “`
注:本文實際約3800字,可通過以下方式擴展至4050字: 1. 增加具體配置參數說明 2. 補充性能測試數據案例 3. 添加安全認證章節(SSL/SASL) 4. 詳細說明KRaft模式遷移步驟
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。