消息队列 :Kafka 核心要点总结

发布于:2025-09-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

一、Kafka 是什么

二、核心概念

1. 基本组件

2. 消息模型

3. 消费者组(Consumer Group)

三、核心特性

1. 高吞吐与可扩展性

2. 消息持久化

3. 消息顺序性

4. 消费者偏移量(Offset)

四、典型使用场景

五、为什么选择 Kafka

六、在本地开发中的使用建议

七,全文精华,可以直接看这个


一、Kafka 是什么

Kafka 是一个分布式流处理平台,本质上是一个高吞吐、可扩展、持久化的消息队列系统。它最初由 LinkedIn 开发,后成为 Apache 基金会的顶级项目,广泛应用于大数据、实时计算和微服务架构中。

二、核心概念

1. 基本组件

  • Producer(生产者)​​:负责创建消息并发送到 Kafka。
  • Consumer(消费者)​​:从 Kafka 读取消息并进行处理。
  • Broker(代理)​​:Kafka 服务器节点,负责接收、存储和传递消息。
  • Topic(主题)​​:消息的分类,生产者向 Topic 发送消息,消费者从 Topic 消费消息。
  • Partition(分区)​​:Topic 的物理分区,每个 Partition 是一个有序、不可变的消息序列,支持并行处理。

  • 等等

2. 消息模型

Kafka 基于发布-订阅模型,采用Topic + Partition​ 的组织方式。一个 Topic 可以包含多个 Partition,每个 Partition 在一个 Broker 上存储,支持水平扩展。

不同的mq采用不同的消息模型,并不是所有的mq都有topic和partition的说法。

3. 消费者组(Consumer Group)

消费者通常以消费者组的形式工作。同一个 Group 内的多个消费者共同消费一个 Topic 的消息,但每个 Partition 只能被组内的一个消费者消费,实现负载均衡和并行处理。

三、核心特性

1. 高吞吐与可扩展性

Kafka 设计初衷是处理海量数据流,单机可支持每秒数十万甚至上百万条消息的吞吐,通过增加 Broker 和 Partition 可实现水平扩展。

2. 消息持久化

消息默认持久化到磁盘,并可配置保留策略(如按时间或大小保留),即使消费者宕机,消息也不会丢失,可重新消费。

3. 消息顺序性

Kafka ​保证单个 Partition 内消息的顺序性,但不保证全局顺序。因此,对于强顺序要求的场景,应确保相关消息进入同一个 Partition。

4. 消费者偏移量(Offset)

Kafka 不会自动删除已消费的消息,消费者通过 Offset 标记消费位置,可随时回溯或重放数据。Offset 由消费者管理,支持手动或自动提交。

四、典型使用场景

  1. 异步处理​:如用户注册后异步发送通知、日志记录等非核心流程。
  2. 系统解耦​:生产者和消费者无需相互感知,通过 Kafka 中间层交互,降低系统耦合度。
  3. 流量削峰​:应对突发流量,Kafka 作为缓冲层保护下游系统。
  4. 日志聚合​:收集分布式系统中的日志、指标等数据,统一处理与分析。
  5. 事件驱动架构​:作为事件总线,支撑微服务间基于事件的通信。

我举个例子哈,就是比如我写的一个项目,是校园招聘平台,求职者投递岗位,需要发送信息给招聘者,但是主要的一个流程是处理这个人的简历存入数据库等操作。发送消息给招聘者、生成日志等操作虽然重要但是不要求高实时性,可以放到后面操作,不用占用主线程的时间,就可以用kafka来操作“送消息给招聘者、生成日志”等操作。

但是需要注意的是,kafka一般用于分布式系统的不同服务间的通信和异步操作。对于单体应用进行异步操作可以使用CompletableFuture​ (Java 提供的 ​本地异步编程工具,用于 ​当前 JVM 内部的异步任务)。

对比项

Kafka

CompletableFuture

作用范围

跨服务 / 分布式

单个应用 / JVM 内部

通信方式

异步消息队列

Future / 回调 / Promise

延迟

有一定延迟(消息堆积可能发生)

几乎实时

适用场景

系统解耦、流量削峰、微服务通信

单体应用内异步任务、并发控制

顺序保证

分区内有序

无特殊顺序保证

复杂度

较高,需部署维护

简单,Java 原生支持

五、为什么选择 Kafka

  • 高并发与高吞吐​:适合大数据场景下的海量消息处理。
  • 分布式架构​:支持多 Broker 集群,具备高可用和容错能力。​​​​​​​​​​​​​​

                对于Broker集群,你可以理解为,一个kafka不够用了,配置多个broker,每一个broker都是一个kafka实例。

  • 数据持久化与重放​:消息长期存储,支持多次消费与数据分析。
  • 灵活的扩展能力​:通过增加 Partition 和 Broker 实现水平扩展

六、在本地开发中的使用建议

Kafka 本身设计上更适用于 Linux 服务器环境,但在 Windows 系统上也可以运行,只是相比 Linux 来说性能与稳定性稍逊,且配置管理相对复杂。

在 Windows 环境下,建议通过 ​Docker 快速启动 Kafka 环境,避免复杂的原生安装与配置。使用 Docker Compose 可一键启动 Kafka 与 ZooKeeper,同时将服务端口映射到本地,方便 Spring Boot 等应用连接测试。

七,全文精华,可以直接看这个

Kafka 是一个分布式消息队列系统(也可以称为分布式流平台) ,主要用于实现异步通信系统解耦。在 Kafka 中,有几个核心概念: Topic(主题) 是消息的分类,生产者(Producer)将消息发送到指定的 Topic,消费者(Consumer)则从 Topic 中订阅并消费消息。我可以为不同的业务逻辑创建不同的 Topic,实现职责分离和消息分类管理。

一个 Topic 可以分成多个 Partition(分区) ,目的是为了提高并发处理能力和吞吐量。Kafka 只保证单个分区内消息的顺序性,并且同一分区在同一时刻只能被同一个消费者组(Consumer Group)中的一个消费者实例消费,但不同的分区可以被不同的消费者并行消费,从而提升整体的消费速度和扩展性。

Kafka 适合用来做异步处理,比如在一个求职系统中,用户提交了岗位投递后,系统不需要立即通知招聘者,可以将“发送投递通知”这个非核心、允许延迟的操作交给 Kafka 异步处理,主线程快速响应用户,而消费者服务在后台异步处理真正的通知逻辑,比如发邮件、记录行为日志等。这种异步方式可以让系统更高效、更健壮,同时提升用户体验。

相比于 Java 中的 CompletableFuture,Kafka 的适用场景更偏向于分布式系统间的异步通信与解耦,而 CompletableFuture 更适合用在单个应用或 JVM 内部的异步任务处理。对于单体应用而言,如果只是简单的异步逻辑,使用 CompletableFuture 可能更轻便,但如果涉及到多个服务之间的消息传递、事件驱动、或者需要削峰填谷、流量控制,Kafka 是更合适的选择。而且 Kafka 的异步处理不要求立即返回处理结果,更强调消息的可靠投递与后续处理。

Kafka 通常用于分布式架构下多个服务之间的通信与协调,因此它天然支持集群模式,可以部署多个 Broker(代理/服务器节点) ,每个 Broker 是一个 Kafka 实例,它们共同组成一个 Kafka 集群,实现数据的高可用、负载均衡与横向扩展。当单个 Broker 的处理能力不足时,可以通过增加 Broker 来扩展整个 Kafka 集群,提升系统的整体吞吐量和容错能力。

虽然 Kafka 本身设计上更适用于 Linux 服务器环境,但在 Windows 系统上也可以运行,只是相比 Linux 来说性能与稳定性稍逊,且配置管理相对复杂。对于本地开发、学习或测试场景,推荐使用 Docker 来快速启动 Kafka 环境,通过拉取别人已经配置好的 Kafka + ZooKeeper 镜像,可以避免手动安装和配置的繁琐过程,实现一键启动、环境隔离、轻量高效,而且这种方式也更贴近生产环境中的实际部署方式(因为生产环境通常也是运行在 Linux 上的)。

此外,Kafka 的消息是持久化存储的,默认会保存一段时间(比如 7 天或更久),即使消费者暂时离线,之后重新启动也能消费到历史消息(只要未过期)。Kafka 还支持多种消息可靠性配置,比如通过 Producer 的 Ack 机制(如 acks=all)来保证消息不丢失,也可以对消息的消费进度(offset)进行管理,实现精确一次、至少一次或至多一次的语义。

Kafka 中的消息在 Producer 发送并成功写入 Topic 后,会持久化存储在 Broker 中。这些消息并不会自动或立即推送给消费者,而是由消费者通过主动拉取(poll)的方式,根据自身逻辑和节奏,在需要的时候从 Kafka 获取并处理。消息的处理时机、速度、顺序,完全由消费者控制,Kafka 只负责可靠地存储和传递。

总的来说,Kafka 不仅仅是一个简单的消息队列,它是一个功能强大、扩展性极高的分布式流处理平台,适用于高并发、分布式、异步解耦的各种业务场景,比如事件驱动架构、日志收集、实时数据处理、微服务通信等。对于开发者来说,理解 Kafka 的核心概念(如 Topic、Partition、Consumer Group、Broker、Offset 等)以及它在分布式系统中的作用,是构建高可用、高并发、松耦合系统的重要基础。


网站公告

今日签到

点亮在社区的每一天
去签到