跳到主要内容

认识

2024年04月19日
柏拉文
越努力,越幸运

一、认识


Kafka 是一个分布式流处理平台,是基于 zookeeper 的分布式消息系统。 Kafka 具有高吞吐率、高性能、低延迟、实时及高可靠等特点。被广泛用于日志收集、消息队列、流式处理、事件驱动架构等场景。相比传统消息队列(RabbitMQ), Kafka 支持百万级 TPS 高吞吐, Kafka 在大规模数据处理上更具优势,是现代数据架构的核心组件之一。

Kafka 架构:

  • Kafka 采用分布式架构,核心组件包括: 1. Producer(生产者), 向 Broker 发送消息; 2. Consumer(消费者):从 Broker 订阅 Topic 并消费数据; 3. Zookeeper, 管理 Kafka 集群的元数据(Leader 选举、Topic 配置等); 4. Kafka ClusterBroker 集群), 存储消息,支持 Partition & Replication

  • Kafka 高可用性由以下机制保障: 1. 分区存储, 数据分布式存储,防止单点故障; 2. ISR(同步副本集), 仅从同步副本确认消息,提高可靠性; 3. Leader-Follower 复制机制, Leader 失效时,Follower 自动接管。

Kafka 场景: 1. 日志收集, 比如 ELK(Elasticsearch + Logstash + Kibana)架构, Kafka 作为日志流式存储, 下游 Elasticsearch 索引日志,提供查询和可视化; 2. 消息队列, 替代 RabbitMQ,实现解耦、削峰、异步处理, 适用于日志处理、监控系统、用户行为跟踪等; 3. 流处理, 结合 Kafka StreamsFlinkSpark Streaming 实现实时数据处理; 4. 事件驱动架构, Kafka 作为 事件溯源(Event Sourcing 的中心,支持可重放事件。

Kafka Vs RabbitMQ: Kafka 设计理念为基于日志存储和流处理, 支持百万级 TPS 高吞吐, 默认消息持久化, 消费者模式为 Pull 拉取。而 RabbitMQ 设计理念基于消息队列和事务, 支持 10wTPS(中等吞吐), 需要开启消息持久化, 消费者模式为 Push 推送

二、概念


2.1 主题

主题(Topic, KafkaTopic 组织消息,每个 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 决定)。ISRIn-Sync Replica):Kafka 只确认写入 ISR 副本的消息,提高可用性。

2.4 事务

事务(Transaction 保证 Kafka 消息的 Exactly Once 语义,确保事务一致性。特性: 1. 幂等性 ProducerIdempotent Producer, 避免重复发送消息; 2. 事务 Producer, 允许多个 Partition 在同一事务内提交。

2.5 生产者

生产者(ProducerKafka 发送消息,将数据写入指定的 Topic(主题)。特点: 1. 支持同步和异步发送消息; 2. 允许 分区(Partitioning 策略(如轮询、基于 Key 的分区等); 3. 提供 数据压缩(SnappyGzipLZ4 以减少网络带宽消耗。

2.6 消费者

消费者(ConsumerKafka 读取数据,通常归属一个消费组(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 进行同步备份。