Kafka的基本了解

Kafka

一、Kafka 是什么?

Kafka 是一个分布式、高吞吐的消息系统,最早由 LinkedIn 开源,后来成为 Apache 顶级项目。它最初的定位是"日 志收集系统",但随着生态的发展,Kafka 已经成为现代企业中最重要的消息中间件之一,被广泛用于 异步解耦、削峰 填谷、日志采集、实时计算、数据管道(Data Pipeline) 等场景。

Kafka 的核心思想是:将数据以"事件流"的形式写入 Topic,并通过分区机制实现高并发写入与消费,从而支持大规模 数据流处理。

二、Kafka 的核心概念

Kafka 的基本结构由以下几个部分组成:

  • Broker:Kafka 服务节点,一个 Kafka 集群通常包含多个 Broker。

  • Topic:消息主题,相当于一个逻辑分类。

  • Partition:Topic 的分区,用于提高并发和吞吐量。

  • Producer:消息生产者,负责写入消息。

  • Consumer:消息消费者,负责读取消息。

  • Consumer Group:消费者组,组内多个消费者共同消费一个 Topic 的不同分区,实现并行消费。

  • Offset:消息在分区中的序号,用于标识消费位置。

  • Kafka 的消息存储是基于磁盘顺序写入(append log),并通过零拷贝技术等手段保证性能。

三、Kafka 的主要特性

1. 高吞吐量

Kafka 的设计目标就是高吞吐,通过分区 + 顺序写磁盘的方式,单机就能达到非常高的写入性能,集群扩展后吞吐更 强。

2. 分布式扩展能力强

Kafka 可以通过增加 Broker 节点横向扩容,Topic 分区也可以扩展,使得集群能够承载更大的数据量。

3. 持久化存储

Kafka 默认将消息落盘保存,消息不会因为 Broker 重启而丢失,适合日志、事件流、业务数据同步等场景。

4. 消费模型灵活

Kafka 支持:

发布订阅模式(多个组订阅同一 Topic)

消费者组模式(同组内分摊分区,实现并行消费)

5. 支持流式处理生态

Kafka 不仅是消息队列,它更像一个数据流平台:

  • Kafka Connect:数据同步组件

  • Kafka Streams:流处理框架

  • 与 Flink / Spark Streaming 集成方便

6. KRaft 模式(Kafka 4.x 的重要变化)

Kafka 早期依赖 Zookeeper 管理元数据(集群节点、Topic信息等)。 Kafka 3.x 开始支持 KRaft(Kafka Raft)模式,Kafka 4.x 更推荐使用 KRaft,从而实现:

  • 不依赖 Zookeeper

  • 部署更简单

  • 运维复杂度降低

四、Kafka 的典型应用场景

Kafka 最常见的使用场景包括:

  1. 系统解耦:订单系统写 Kafka,库存系统订阅处理。

  2. 削峰填谷:高并发请求先写 Kafka,后端慢慢消费处理。

  3. 日志采集:服务日志统一写 Kafka,再进入 ELK 或大数据平台。

  4. 实时计算:Kafka + Flink 实时统计用户行为。

  5. 数据同步:数据库 binlog 写 Kafka,再同步到 ES、Redis、数仓。

五、Kafka 4.2.0 Windows 单机启动命令

(KRaft,无需 Zookeeper)

以下为 Windows 下 Kafka 4.2.0(kafka2.13-4.2.0)单机启动步骤。

假设 Kafka 解压目录为:

E:\kafka_2.13-4.2.0

1. 进入 Kafka 根目录

cd /d E:\kafka_2.13-4.2.0

2. 生成 cluster-id(只执行一次)

cmd 复制代码
bin\windows\kafka-storage.bat random-uuid

输出示例:

复制代码
vBC75SBHTyiu62KueirjYA

3. 初始化存储(format,只执行一次)

cmd 复制代码
bin\windows\kafka-storage.bat format --standalone -t vBC75SBHTyiu62KueirjYA -c config\server.properties

注意:format 只需要执行一次,执行过后不要重复执行,否则可能导致数据目录重新初始化。

4. 启动 Kafka(每次启动执行)

cmd 复制代码
bin\windows\kafka-server-start.bat config\server.properties

Kafka 启动后窗口不要关闭。

5. 创建 Topic(可选)

新开 CMD 窗口执行:

cmd 复制代码
cd /d E:\kafka_2.13-4.2.0 bin\windows\kafka-topics.bat --create --topic test-topic --bootstrap-server localhost:9092 - -partitions 1 --replication-factor 1

6. 生产者发送消息(可选)

cmd 复制代码
bin\windows\kafka-console-producer.bat --topic test-topic --bootstrap-server localhost:9092

7. 消费者消费消息(可选)

cmd 复制代码
bin\windows\kafka-console-consumer.bat --topic test-topic --from-beginning --bootstrap- server localhost:9092

8. 关闭 Kafka

在 Kafka 运行窗口按:

Ctrl + C

六、Kafka 与 RocketMQ、RabbitMQ 的对比分析

在企业中常见的消息队列主要有 Kafka、RocketMQ、RabbitMQ。它们各自定位不同,适用场景也不同。

1. Kafka vs RocketMQ

Kafka 优势

  • 吞吐量非常高(适合大数据场景)

  • 分区机制强大,适合日志和事件流

  • 与大数据生态结合紧密(Flink、Spark、Hadoop)

  • 天然支持流式处理

Kafka 劣势

  • 消息顺序只能保证"分区内顺序"

  • 事务消息、延迟消息等能力需要额外实现或组件支持

  • 对业务消息场景来说配置和运维略复杂

RocketMQ 优势

  • 更适合业务场景(订单、支付、交易)

  • 支持 延迟消息、事务消息、顺序消息

  • 消费失败重试机制成熟

  • 在国内互联网企业中应用广泛(阿里系)

RocketMQ 劣势

  • 生态和流式处理能力不如 Kafka 强

  • 在日志采集、海量数据吞吐场景略弱于 Kafka

2. Kafka vs RabbitMQ

Kafka 优势

  • 吞吐远高于 RabbitMQ

  • 分区扩展能力更强

  • 更适合日志/流式数据/实时计算

Kafka 劣势

  • 低延迟不如 RabbitMQ(RabbitMQ 在微秒级别更优秀)

  • Kafka 消息模型更偏"日志流",不如 RabbitMQ 的路由灵活

RabbitMQ 优势

  • 基于 AMQP 协议,路由能力非常强

  • 支持多种交换机模式(Direct、Topic、Fanout)

  • 消息可靠性、确认机制成熟

  • 适合中小型业务系统的异步通信

RabbitMQ 劣势

  • 吞吐量比 Kafka 和 RocketMQ 小

  • 集群扩展复杂,性能在大规模场景下容易成为瓶颈

  • 不适合大数据日志、流处理场景

七、三者总结对比表

对比维度 Kafka RocketMQ RabbitMQ
定位 流式数据平台、日志系统 业务消息队列 企业级消息中间件(AMQP)
吞吐量 极高(百万级) 高(十万级) 中等(万级)
延迟 中等(毫秒级) 中等偏低(毫秒级) 低(微秒级)
顺序消息 支持(分区内顺序) 支持(单Queue内严格顺序) 支持(但吞吐受影响)
事务消息 支持(但较复杂) 原生支持(金融级) 支持(但不如RocketMQ完善)
延迟消息 不支持(需额外实现) 原生支持 支持(通过插件或TTL实现)
消费模式 Pull 为主 Push / Pull Push 为主
生态整合 Flink/Spark/大数据生态强 Java业务生态强 微服务集成强
典型场景 日志、埋点、实时计算 订单、支付、交易业务 系统解耦、任务异步

八、如何选择 Kafka / RocketMQ / RabbitMQ?

选择 Kafka 的场景

  • 大规模日志采集

  • 用户行为埋点

  • 数据同步管道

  • 实时计算(Flink / Spark Streaming)

  • 对吞吐量要求极高

选择 RocketMQ 的场景

  • 订单、交易、支付等核心业务

  • 需要延迟消息、事务消息

  • 需要严格的消息可靠投递和重试机制

选择 RabbitMQ 的场景

  • 微服务之间的异步调用

  • 对消息路由要求复杂(多种交换机规则)

  • 系统规模中小,追求低延迟和稳定性

九、总结

Kafka 是一个以"事件流"为核心的数据平台型消息系统,强调高吞吐、可扩展、持久化与流式生态整合。在 Kafka 4.x 中,KRaft 模式进一步降低了部署复杂度,使 Kafka 更适合现代企业快速搭建高性能消息系统。

RocketMQ 更偏业务消息领域,功能更贴近企业交易系统需求;RabbitMQ 则以灵活路由、低延迟和 AMQP 协议标准 化为优势,适合中小规模系统的异步通信。

如果你的系统偏实时数据、日志、数据平台,Kafka 是首选;如果偏交易业务和复杂消息能力,RocketMQ 更合适; 如果偏传统企业消息路由与轻量异步,RabbitMQ 更适合。

相关推荐
阿里云云原生5 天前
告别冗长链路!Kafka × Table Bucket 实现开放表格式零 ETL 实时入湖
云原生·kafka
风吹夏回11 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
风吹夏回11 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
霸道流氓气质11 天前
分布式追踪与 RequestId 传播完全指南
分布式
cheems952711 天前
[RabbitMQ高级特性] 消息确认机制:从 Ready / Unacked 到 basicAck、basicReject、basicNack 的底层拆解
分布式·rabbitmq·ruby
whaledown11 天前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot
枫华落尽11 天前
【Hadoop01-完全分布式运行模式】
分布式
隔壁阿布都11 天前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
文艺倾年11 天前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
ACP广源盛1392462567311 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark