Kafka 详细介绍及使用指南
一、核心概念
-
分布式流处理平台
- 支持高吞吐、低延迟的消息传递
- 持久化存储(默认保留7天)
- 横向扩展能力(支持集群部署)
-
核心功能
- 发布/订阅消息系统
- 实时流数据处理
- 日志聚合与事件溯源
二、架构解析
+----------+ +----------+
| Producer | ----> | Broker | <----+ Consumer
+----------+ +----------+ +----------+
|
+---------+---------+
| Topic (Partition) |
+-------------------+
-
Broker
- 独立运行的Kafka服务节点
- 集群通过
broker.id
标识区分
-
Topic & Partition
- 逻辑消息分类(如:
order-events
) - 物理分区存储(支持并行处理)
- 消息偏移量: o f f s e t ∈ N offset \in \mathbb{N} offset∈N
- 逻辑消息分类(如:
-
副本机制
- Leader副本处理读写
- Follower副本同步数据
三、核心组件
组件 | 功能描述 |
---|---|
Producer | 消息发布端(支持异步/同步发送) |
Consumer | 消息订阅端(支持群组消费) |
Consumer Group | 实现负载均衡的消费者集合 |
ZooKeeper | 元数据管理(Kafka 2.8+开始逐步淘汰) |
四、典型应用场景
- 实时日志分析系统
- 电商订单状态跟踪
- IoT设备数据采集
- 微服务间异步通信
- 金融交易流水记录
五、快速入门示例
-
环境部署
# 下载Kafka wget https://archive.apache.org/dist/kafka/3.2.0/kafka_2.13-3.2.0.tgz # 启动服务 bin/zookeeper-server-start.sh config/zookeeper.properties bin/kafka-server-start.sh config/server.properties
-
创建Topic
bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --replication-factor 1 \ --partitions 3 \ --topic test-topic
-
Python生产者示例
from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('test-topic', b'Hello Kafka!') producer.flush()
-
Python消费者示例
from kafka import KafkaConsumer consumer = KafkaConsumer('test-topic', bootstrap_servers='localhost:9092', auto_offset_reset='earliest') for msg in consumer: print(f"Received: {msg.value.decode()}")
六、高级特性
-
消息持久化
- 通过
log.segment.bytes
控制分段大小 - 保留策略:
log.retention.hours=168
- 通过
-
精准一次语义
producer = KafkaProducer( bootstrap_servers='localhost:9092', enable_idempotence=True, acks='all' )
-
流处理API
KStream<String, String> stream = builder.stream("input-topic"); stream.filter((key, value) -> value.contains("important")) .to("output-topic");
七、最佳实践
-
分区策略
- 根据业务键哈希分配
- 避免单分区热点问题
-
性能调优
- Producer端:
linger.ms=5
(批量发送延迟) - Consumer端:
fetch.min.bytes=1
(最小抓取量)
- Producer端:
-
监控指标
- 分区均衡状态
- 消费者延迟(Consumer Lag)
- 网络吞吐量
-
安全配置
security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-256
八、数据保留策略
注:可通过log.retention.bytes
和log.retention.ms
组合控制数据保留策略