Kafka 基础知识总结
1. Kafka 应用场景
Kafka 作为一款高吞吐的分布式消息系统,适用于多种应用场景:
- 消息队列:用于解耦生产者和消费者,提高系统的伸缩性。
- 日志收集:集中存储和处理系统日志,方便分析和监控。
- 流计算:处理实时数据流,将数据传输给实时计算系统进行计算。
- 事件溯源:记录事件发生的历史,以便后续回溯和分析。
- Metrics 采集:收集和存储系统的监控指标数据。
2. Kafka 组件介绍
Kafka 由多个核心组件组成:
-
生产者(Producer):负责将消息发送到 Kafka。
-
消费者(Consumer):从 Kafka 读取消息进行处理。
-
消息代理(Broker):存储和管理消息,负责接收、存储和转发数据。
-
协调器(Zookeeper):提供分布式协调和管理任务。
-
主题(Topic):类似广播频道,生产者将消息发送到指定的
Topic
,消费者从Topic
读取消息。创建 Topic 命令示例:
1
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic my-topic
-
分区(Partition):一个
Topic
进一步分为多个Partition
,可以提高数据局部性、支持并行处理,实现负载均衡。
3. Kafka 消息有序性
Kafka 的消息处理方式:
- 不同分区的消息是并行处理的,因此 Kafka 全局上不保证消息的有序性。
- 同一分区内的消息是严格有序的,消费者会按照
offset
依次消费。
4. Offset(偏移量)
- Kafka 中的每条消息都有唯一的 Offset(偏移量),从
0
开始递增。 - Offset 用于追踪消息消费进度,每个消费者组都会维护自己的 Offset。
5. Consumer Group(消费者组)
-
一个分区(Partition)只能由一个组员消费,保证分区数据不会被组内多个消费者重复消费。
-
多个 Consumer Group 可以同时消费同一个 Topic,不同组之间不会相互影响。例如:
Group A
读取Topic X
的消息一次。Group B
也可以独立读取Topic X
的消息一次。
这样,每个组都可以独立处理相同的消息,实现多用途消费。
6. 总结
- Kafka 适用于消息队列、日志收集、流计算、事件溯源等场景。
- 核心组件包括 Producer、Consumer、Broker、Zookeeper、Topic、Partition 等。
- 消息的全局有序性无法保证,但 同一分区内是有序的。
- Offset 记录消息的消费进度,每个 Consumer Group 维护自己的 Offset。
- 通过 Consumer Group 机制,可以控制消息的分发和重复消费。
评论