Kafka 是什么?

Kafka 是一个开源的分布式事件流处理平台。 它最初由 LinkedIn 开发,后来捐赠给了 Apache 软件基金会,并用 Java 和 Scala 编写。 Kafka 的设计目标是为处理实时数据流提供一个统一的、高吞吐量、低延迟的平台。

从本质上讲,可以将 Kafka 理解为一个高度可靠且可扩展的"日志"或"记录簿",用于记录在不同系统和应用程序之间发生的"事件"。

Kafka 的核心能力

Kafka 主要具备三大核心能力:

  1. 发布和订阅事件流: 它允许应用程序发布(写入)和订阅(读取)事件流。
  2. 持久化和可靠的存储: Kafka 以容错和持久的方式准确地按顺序存储记录。 我们可以理解为数据是可靠的,即使在系统出现故障时也不会丢失。
  3. 实时处理事件流: Kafka 允许在事件发生时对其进行实时处理。

Kafka 是如何工作的?

Kafka 的架构围绕几个关键概念构建:

  • 事件 (Event): 事件是 Kafka 中最基本的数据单元,记录了发生过的事情。 例如,一次用户点击、一个支付订单或者来自传感器的读数都可以是一个事件。
  • 主题 (Topic): 主题是事件的逻辑分组或类别。 你可以把它想象成数据库中的一张表或者文件系统中的一个文件夹。生产者将事件发布到特定的主题,消费者则订阅这些主题来读取事件。
  • 生产者 (Producer): 生产者是创建并向 Kafka 主题发布事件的应用程序。
  • 消费者 (Consumer): 消费者是从 Kafka 主题订阅并处理事件的应用程序。
  • Broker: Kafka 集群由一个或多个服务器组成,这些服务器被称为 Broker。 Broker 负责接收来自生产者的消息,为消息分配偏移量,并将消息持久化到磁盘上。
  • 分区 (Partition): 为了实现可伸缩性,一个主题可以被分成多个分区。 分区允许数据在多个 Broker 上进行水平扩展,从而实现更高的并行处理能力。
  • 消费者组 (Consumer Group): 多个消费者可以组成一个消费者组来共同消费一个主题。主题中的每个分区只能由组内的一个消费者来消费,这确保了消息被并行处理,提高了消费能力。

Kafka 与传统消息队列的区别

虽然 Kafka 可以像传统的消息队列(如 RabbitMQ 或 ActiveMQ)一样用于系统解耦和异步通信,但它们之间存在一些关键区别:

特性 Kafka 传统消息队列 (如 RabbitMQ)
模型 基于拉取 (Pull-based),消费者主动从 Broker 拉取数据。 通常基于推送 (Push-based),Broker 将消息推送给消费者。
消息保留 消息在消费后仍会持久化在主题中,可以被多个消费者或应用程序重复消费。 消息在被消费并确认后通常会被删除。
吞吐量 设计用于高吞吐量的场景,能够处理每秒数百万条消息。 吞吐量相对较低。
可伸缩性 通过分区机制实现出色的水平扩展能力。 扩展性相对有限。
适用场景 实时流处理、日志聚合、网站活动跟踪、大规模数据管道。 任务队列、后台作业处理、简单的事件分发。

Kafka 的主要应用场景

凭借其高性能和可扩展性,Kafka 被广泛应用于各种场景,超过 80% 的财富 500 强公司都在使用它。 常见的应用场景包括:

  • 实时数据管道: 在不同系统之间可靠地传输数据。
  • 流处理和实时分析: 与 Flink、Spark 等流处理框架集成,进行实时的数据分析和洞察。
  • 网站活动跟踪: 收集和分析用户行为数据,如页面浏览、点击和搜索。
  • 日志聚合: 从分布式系统中收集、处理和存储日志数据。
  • 指标和监控: 聚合来自分布式应用程序的指标,用于实时监控和警报。
  • 金融领域: 用于实时欺诈检测和处理市场数据。
  • 物联网 (IoT): 接收和处理来自大量物联网设备和传感器的数据。

总而言之,Kafka 不仅仅是一个消息队列,它更是一个功能强大的分布式事件流平台,为构建数据驱动的实时应用程序提供了坚实的基础。

相关推荐
一条泥憨鱼1 天前
【消息队列】ACK确认了什么:消息队列可靠投递的完整链路
java·后端·kafka·消息队列·rabbitmq
斯普信专业组1 天前
Kafka 消费者 poll() 流程与原理详解
kafka·流程图
迅翼SwiftWing1 天前
编队系列(二)|固定翼如何依靠邻居信息保持队形?一致性控制、通信拓扑与分布式仿真实现,附仿真代码
分布式
ly76891 天前
幂等消费者与重试副作用:Kafka 端点接入时的去重边界
分布式·kafka·linq·apache camel·幂等消费者·重试副作用·去重边界
qq_452396231 天前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
程序猿乐锅2 天前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
sunny06602 天前
推理 INFRA 方法论(2):分布式推理:TP、DP、EP、CP 与 PP 的取舍
人工智能·分布式
字节探索2 天前
Redis 分布式锁:从 SETNX 误删到看门狗自动续期的原理与实践
redis·分布式
9624562 天前
容器 RUNNING,为什么中间件仍不可用?ActiveMQ 与 Kafka/ZooKeeper 恢复实录
中间件·kafka·activemq