Kafka的知识点汇总

发布时间:2021-09-17 14:13:40 作者:chen
来源:亿速云 阅读:151
# 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

2.2 集群部署

关键配置项(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

三、生产者与消费者

3.1 消息生产流程

// 生产者示例代码
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"));

3.2 消费者组机制


四、Topic与Partition

4.1 分区策略

策略 描述 适用场景
Round Robin 均匀分配到所有分区 无消息顺序要求
Key Hashing 相同Key总是路由到固定分区 需要保证消息顺序
Custom Partitioner 自定义分区逻辑 特殊业务需求

4.2 副本机制

副本放置策略:

Broker 1: Partition0(Leader), Partition1(Follower)
Broker 2: Partition1(Leader), Partition2(Follower)
Broker 3: Partition2(Leader), Partition0(Follower)

五、高级特性

5.1 事务支持

保证跨分区的原子性写入:

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();
}

5.2 消息压缩

支持的压缩算法: - gzip(压缩率高但CPU开销大) - snappy(平衡型) - lz4(低延迟)

配置方式:

compression.type=snappy

六、性能优化

6.1 硬件配置建议

资源类型 推荐配置
CPU 16核以上(建议SSD场景)
内存 32GB+(堆内存不超过14GB)
磁盘 SSD RD10,预留50%空间
网络 万兆网卡

6.2 JVM调优

# 建议G1垃圾回收器
export KAFKA_HEAP_OPTS="-Xms12g -Xmx12g -XX:+UseG1GC"

七、监控与管理

7.1 常用监控指标

7.2 运维工具

# 查看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

八、FAQ

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模式迁移步骤

推荐阅读:
  1. Python入门知识点汇总
  2. RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kafka

上一篇:XML和Tomcat的示例分析

下一篇:CMarkup类操作Xml的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》