Kafka

发布于:2024-11-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. 什么是 Kafka?

Kafka 是一个 分布式流处理平台,主要用来处理 实时数据流。它最初由 LinkedIn 开发,现在是 Apache 软件基金会的一个开源项目。

Kafka 通常被用作 消息队列数据流处理系统,提供高吞吐量和高可靠性的实时数据分发能力。

Kafka特性:

  • 发布/订阅 模型。
  • 持久化数据存储。
  • 高吞吐量、低延迟。
  • 横向扩展能力。

2. Kafka 的核心概念

2.1 核心组件

组件 描述
Topic 生产者将消息发送到指定的 Topic,消费者订阅 Topic 接收消息。
Partition 每个 Topic 被分成若干分区,分区是 Kafka 中的存储单元。
Offset 分区内消息的唯一标识,消费者通过 Offset 跟踪消息的位置。
Broker Kafka 的服务器节点,负责存储和分发消息,一个 Kafka 集群由多个 Broker 组成。
Producer 消息生产者,将消息发送到 Kafka。
Consumer 消息消费者,从 Kafka 的分区中读取消息。
Consumer Group 消费者组,多个消费者可以协作消费一个 Topic,确保分区被唯一消费。
ZooKeeper Kafka 的元数据管理工具。

2.2 Kafka 的消息架构图

生产阶段:
producer将消息发送到Topic分区中去,写入leader目录中去

存储阶段:

每个leader会复制多个副本Segment 文件存储消息,支持高效的顺序写入和查询。

消费阶段:
Consumergroup 从分区的 Leader 拉取消息,按 Offset 跟踪消费进度。

2.3消息流转的详细流程

Producer发送消息:

1.选择一个目标Topic:

  • Producer将消息发送给Topic分区
  • Producer会指定一个Topic 进行发送

2.进行分区:

  • Kafka使用分区策略进行分区
  • 指定一个Partition来分配分区作为存储单元
  • 没有指定的时候则采用轮询方式分配分区

3.将消息发送给分区下的leader:

  • Producer通过Kafka与leader进行交互
  • Producer将消息发送给分区下的leader

4.状态确认机制:

Producer可以配置状态来确认消息状态:

  • 0:producer发送给broker就结束(速度最快,但是安全性最低)
  • 1:producer发送给leader写入确认之后返回 (速度中等,安全性中等)
  • all:所有的副本确认写入之后返回 (速度最慢,安全性最高)
Broker存储消息:

1.Leader写入消息:

分区里面的Leader负责接受producer发送的消息,分为三个文件.index .log .timeindex文件

其中.log是正真的消息存储文件,.index是索引文件,.timeindex是时间索引文件

2.复制Follower副本:

Follower副本会复制Leader里面的所有内容,作为同步,副本跟Leader是在同一个分区下面,但是分布在分布在不同的broker里面,Leader跟Follower副本是通过选举来实现的,如果当leader宕机的时候,会重新选取一个同步过的Follower副本来重新成为Leader然后在同步给其他Follower副本,这也是为什么Leader跟Follower副本没有在一个Broker下的原因,防止当一个Broker宕机的时候,消息丢失

3.消息持久化:

  • 消息会写入磁盘的Segment文件进行存储
  • 消息按照offset进行存储,支持快速检索

4.消息清理策略:

  • 通过时间进行清理,默认超过7天之后会进行清除
  • 通过大小进行清理,默认超过1G之后会进行清除
  • 可以通过配置来设定具体的时间或者大小
Cusomer拉取消息:

Cusomer订阅Topic:

  • Cusomergroup订阅一个或多个Topic
  • Kafka会将分区分配给消费者组中的每一个消费者
  • 每个分区只能被一个消费者消费

Cusomer消费消息:

  • Cusomer从分区中的leader拉取消息
  • 拉取的消息通过offset标识,cusomer可以通过offset指定从哪个消息开始拉取

消费策略:

  • Cusomer会只消费最新的消息
  • Cusomer从分区起始的offset开始消费消息
  • Cusomer从指定的offset开始消费消息

3.Kafka的优缺点

优点:

  • 高吞吐量:顺序写磁盘、批量处理消息。
  • 持久化存储:消息可以保留指定时间,允许消费者重复读取。
  • 分布式架构:支持水平扩展,轻松处理海量数据。
  • 灵活消费模型:支持广播和分布式消费。

缺点:

  • 存储占用较大,需合理规划存储资源。

4.kafka的使用场景

在电商系统中,kafka主要可以应用于记录用户行为,电商的访问量大的时候,用户行为量每天将会成倍增加,使用RabbitMQ进行订单用户的消息处理还可以,但是在应对大量的用户行为的时候,RabbitMQ就显得有些捉襟见肘了