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 更适合。

相关推荐
珠***格3 小时前
XGF10-Z-4典型接入方式解析:10千伏专变用户380伏多点分布式光伏如何并网?
网络·人工智能·分布式·安全·边缘计算
2601_960906724 小时前
中国智能投影市场(不含激光电视)全渠道销量同比暴跌21.4%
kafka·etcd·consul·storm
阿里云云原生10 小时前
Agent 不再是“玩具”!AgentScope Java 2.0 GA 发布:构建企业级分布式智能体底座
java·开发语言·分布式·agentscope
时代的狂11 小时前
RabbitMQ 面试问答
分布式·面试·rabbitmq
hkNaruto12 小时前
【大数据】《传统Hadoop大数据技术入门:补充与进阶——从数据格式到智能决策的问答实录》
大数据·hadoop·分布式
ThanksGive12 小时前
TurboLock:从 v1 Redis 分布式锁到 v2 Go 并发控制中间件
分布式·后端
韩楚风1 天前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
ACP广源盛139246256731 天前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
ZENERGY-众壹2 天前
50MW分布式VPP接入实战:调度中心要求的1分钟频率如何不卡死API
运维·服务器·分布式·光伏运维
富士康质检员张全蛋2 天前
Kafka的操作 生产消息
分布式·kafka