认识
一、认识
Kafka
是一个分布式流处理平台,是基于 zookeeper
的分布式消息系统。 Kafka
具有高吞吐率、高性能、低延迟、实时及高可靠等特点。被广泛用于日志收集、消息队列、流式处理、事件驱动架构等场景。相比传统消息队列(RabbitMQ
), Kafka
支持百万级 TPS
高吞吐, Kafka
在大规模数据处理上更具优势,是现代数据架构的核心组件之一。
Kafka
架构:
-
Kafka
采用分布式架构,核心组件包括: 1.Producer
(生产者), 向Broker
发送消息; 2.Consumer
(消费者):从Broker
订阅Topic
并消费数据; 3.Zookeeper
, 管理Kafka
集群的元数据(Leader
选举、Topic
配置等); 4.Kafka Cluster
(Broker
集群), 存储消息,支持Partition & Replication
。 -
Kafka
高可用性由以下机制保障: 1. 分区存储, 数据分布式存储,防止单点故障; 2.ISR
(同步副本集), 仅从同步副本确认消息,提高可靠性; 3.Leader-Follower
复制机制,Leader
失效时,Follower
自动接管。
Kafka
场景: 1. 日志收集, 比如 ELK(Elasticsearch + Logstash + Kibana)
架构, Kafka
作为日志流式存储, 下游 Elasticsearch
索引日志,提供查询和可视化; 2. 消息队列, 替代 RabbitMQ
,实现解耦、削峰、异步处理, 适用于日志处理、监控系统、用户行为跟踪等; 3. 流处理, 结合 Kafka Streams
或 Flink
、Spark Streaming
实现实时数据处理; 4. 事件驱动架构, Kafka
作为 事件溯源(Event Sourcing
) 的中心,支持可重放事件。
Kafka Vs RabbitMQ
: Kafka
设计理念为基于日志存储和流处理, 支持百万级 TPS
高吞吐, 默认消息持久化, 消费者模式为 Pull
拉取。而 RabbitMQ
设计理念基于消息队列和事务, 支持 10w
级 TPS
(中等吞吐), 需要开启消息持久化, 消费者模式为 Push
推送。
二、概念
2.1 主题
主题(Topic
), Kafka
以 Topic
组织消息,每个 Topic
是一个逻辑分类。一个 Topic
可以有多个分区(Partition
),数据存储在不同分区。Topic
可以设置不同副本因子(Replication Factor
),提高可靠性。Kafka Topic
只能增加分区, 不能减少。
2.2 分区
分区(Partition
) 数据实际存储单位, Kafka
通过 Partition
进行并行读写,提高吞吐量。具有如下特点: 水平扩展, 更多 Partition
允许更多消费者并行处理数据; 消息顺序性, 同一 Partition
内消息是有序的,不同 Partition
之间无全局顺序; Leader-Follower
机制, 每个 Partition
有一个 Leader
处理请求,其他 Replica
仅用于数据同步。
2.3 复制
复制 Replication
提高数据可靠性,避免单点故障。工作方式为: 每个 Partition
都有多个副本(由 Replication Factor
决定)。ISR
(In-Sync Replica
):Kafka
只确认写入 ISR
副本的消息,提高可用性。
2.4 事务
事务(Transaction
) 保证 Kafka
消息的 Exactly Once
语义,确保事务一致性。特性: 1. 幂等性 Producer
(Idempotent Producer
), 避免重复发送消息; 2. 事务 Producer
, 允许多个 Partition
在同一事务内提交。
2.5 生产者
生产者(Producer
) 向 Kafka
发送消息,将数据写入指定的 Topic
(主题)。特点: 1. 支持同步和异步发送消息; 2. 允许 分区(Partitioning
) 策略(如轮询、基于 Key
的分区等); 3. 提供 数据压缩(Snappy
、Gzip
、LZ4
) 以减少网络带宽消耗。
2.6 消费者
消费者(Consumer
) 从 Kafka
读取数据,通常归属一个消费组(Consumer Group
)。特点: 1. 拉取模式(Pull Model
), Kafka
由消费者主动拉取数据; 2. 自动提交 or
手动提交偏移量(Offset
), 保证数据一致性; 3. 消费组(Consumer Group
), 同一 Consumer Group
内,多个 Consumer
共同消费 Topic
的不同 Partition
, 不同 Consumer Group
之间相互独立,可并行消费相同数据。
2.7 偏移量
偏移量(Offset
) Kafka
记录消息在 Partition
中的位置(偏移量)。存储位置: 1. Kafka
内部 Topic
(__consumer_offsets
)(默认); 2. Zookeeper
(早期 Kafka
版本使用); 3. 自定义存储(如 Redis
、数据库)。
2.8 Broker
Broker
Kafka
集群的核心节点,负责消息存储和分发。特点: Kafka
集群可以包含多个 Broker
; Broker
之间通过 Zookeeper
进行管理(选举 Controller
,存储元数据); Leader
负责处理写请求,Follower
进行同步备份。