kafka 定义、概念、消费模型

74 阅读4分钟

1. kafka 定义

传统定义是一个分布式的基于 发布、订阅模式消息队列,主要应用于大数据实时处理场景;现在kafka已经定义为一个分布式流平台,用于数据处理,高性能数据管道、流分析、数据集成和关键应用。

kafka应用场景.png

为什么现在主流的不使用kafka作为消息队列使用了呢?

  • 他的MQ的功能是不完善的,有好多功能kafka是没有的。

特性

  • 消息被消费完之后,消息不会被马上删除,到了过期时间,消息才会被删除掉。
  • 具有消息回溯功能。【可以根据偏移量,再消费一遍】
  • 容错性,自愈能力。
  • 如果要保证消息不丢失,那么就会降低性能,而且消息会重复【后面会写】
  • 适合处理一些 消息不是特别重要,消息数据量非常大,通过kafka传递到其他系统做处理。【MQ功能不全】

kafka架构图

image.png

2. 核心概念

  1. Producer(生产者)
    • 生产者是数据的来源,负责将数据发布到 Kafka 的主题(Topic)中。生产者可以是各种应用程序、服务或设备。
  2. Consumer(消费者)
    • 消费者从 Kafka 的主题中读取数据。一个或多个消费者可以订阅一个或多个主题。【拉模型,拉取到消息,不停消费】
  3. Topic(主题)
    • 主题是 Kafka 用来组织数据的分类。每个主题是一个日志数据的流记录。主题可以分为多个分区(Partition),提高并发处理能力。【是kafka下消息的类别,类似于RabbitMQ中的Exchange的概念】
  4. Partition(分区)
    • 每个主题可以有多个分区,分区是 Kafka 的并发处理单元。每个分区是一个有序的、不可变的记录序列,记录被追加到分区的尾部。【是kafka下数据存储的基本单元,这个是物理上的概念。】
  5. Broker(代理)
    • Kafka 集群由一个或多个代理(Broker)组成,每个代理负责存储和服务部分主题的分区。代理之间可以相互通信,以实现数据的复制和负载均衡。【代表了kafka的实体服务】
  6. Zookeeper
    • Kafka 使用 Zookeeper 进行分布式协调,管理代理、主题、分区和消费者组的信息。Zookeeper 负责处理 Kafka 集群的状态管理和元数据存储。
  7. Controlle
    • 控制器是集群中的概念,每个集群中会选出一个Broker担任控制器角色,控制器是kafka集群中心。
  8. Cluster
    • 集群指的是由多个Broker所共同构成的一个整体,对外提供统一的服务,这类于我们在部署系统时都会采用集群的方式来进行。
  9. Replication
    • 每个分区都有多个副本,副本的作用是做备胎,主分区(Leader)会将数据同步到 从分区(Follower)。
  10. leader & follower
    • Leader 和 Follower 是分区(Partition)复制机制的核心概念。每个分区可以有多个副本(Replica),这些副本分布在不同的 Kafka Broker 上,以确保数据的高可用性和容错性。。

image.png

3. 消费模型的区别

消息队列(Message Queue,MQ)模型中的推模型(Push Model)和拉模型(Pull Model)是两种不同的消息传递方式,它们各有优缺点,并适用于不同的应用场景,kafka是拉模型。

推模型(Push Model)

在推模型中,消息由消息队列主动推送给消费者。消费者不需要主动请求消息,而是被动地接收消息。消息队列根据一定的策略(如轮询或广播)将消息分发给消费者。

优点:

  • 实时性高:消息可以立即送达消费者,减少了消息延迟。
  • 简单:消费者只需要实现消息处理逻辑,不需要主动拉取消息。

缺点:

  • 流量控制难:如果消费者处理速度跟不上消息推送速度,可能会导致消息积压或消费者过载。
  • 适应性差:推送速度固定,无法根据消费者的处理能力动态调整。

适用场景:

  • 适用于实时性要求高的场景,例如实时通知、报警系统。
  • 消费者处理能力相对均衡的情况下,推模型可以简化设计。
拉模型(Pull Model)

在拉模型中,消费者主动从消息队列中拉取消息。消费者决定何时以及以何种速度拉取消息,控制权在消费者手中。

优点:

  • 流量控制好:消费者可以根据自身处理能力主动拉取消息,避免过载。
  • 适应性强:可以根据消费者的处理能力动态调整拉取速度。

缺点:

  • 实时性差:消息的到达时间取决于消费者的拉取频率,可能会有延迟。
  • 复杂性高:消费者需要实现拉取消息的逻辑,并处理拉取策略。

适用场景:

  • 适用于需要严格流量控制的场景,例如批处理系统、异步任务处理。
  • 消费者处理能力差异较大的情况下,拉模型可以更好地适应不同的处理速度。

下一章:kafka 的安装使用‘写完补上链接’