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

相关推荐
Amy187021118231 小时前
分布式光伏并网新规落地在即,一套监控系统如何打通“四可”合规与收益优化的双重关卡?
分布式
超梦dasgg2 小时前
Java 生产环境分布式定时任务全解(实战落地版)
java·开发语言·分布式
汪小哥3 小时前
kafka 初识
分布式·kafka
Shan12053 小时前
分布式锁的优势与互斥性
分布式
段一凡-华北理工大学3 小时前
工业领域的Hadoop架构学习~系列文章18:制造业Hadoop应用实践 - 从数据到智能的完整闭环
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
暗夜猎手-大魔王3 小时前
转载--Hermes Agent 企业级分布式部署方案
分布式
heimeiyingwang4 小时前
【架构实战】日志体系设计:从ELK到可观测性的演进
分布式·缓存·架构
可乐ea4 小时前
【知识获取与分享社区项目 | 项目日记第 24 天】终章总结:从认证、发布、计数、Feed、搜索到 RAG:完整复盘一个知识社区后端系统
java·spring boot·redis·mysql·elasticsearch·ai·kafka
Jabes.yang4 小时前
Java面试实录:AIGC场景下的Stream、微服务、Redis、Kafka与安全实战
java·spring boot·redis·微服务·面试·kafka·aigc