您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。