用例

以下是 Apache Kafka® 的一些流行用例的描述。有关其中一些正在实施的领域的概述,请参阅此博客文章

消息传递

Kafka 可以很好地替代更传统的消息代理。使用消息代理的原因有多种(将处理与数据生产者分离、缓冲未处理的消息等)。与大多数消息系统相比,Kafka 具有更好的吞吐量、内置分区、复制和容错能力,这使其成为大规模消息处理应用程序的良好解决方案。

根据我们的经验,消息传递的使用通常吞吐量相对较低,但可能需要较低的端到端延迟,并且通常依赖于 Kafka 提供的强大的持久性保证。

在这个领域,Kafka 可以与ActiveMQRabbitMQ等传统消息系统相媲美。

网站活动跟踪

Kafka 的最初用例是能够将用户活动跟踪管道重建为一组实时发布-订阅源。这意味着站点活动(页面浏览、搜索或用户可能执行的其他操作)将发布到中心主题,每种活动类型一个主题。这些源可用于一系列用例的订阅,包括实时处理、实时监控以及加载到 Hadoop 或离线数据仓库系统中以进行离线处理和报告。

活动跟踪的量通常非常大,因为每个用户页面视图都会生成许多活动消息。

指标

Kafka常用于运行监控数据。这涉及聚合来自分布式应用程序的统计数据以生成集中的操作数据源。

日志聚合

许多人使用 Kafka 作为日志聚合解决方案的替代品。日志聚合通常从服务器收集物理日志文件,并将它们放在一个中心位置(可能是文件服务器或 HDFS)进行处理。Kafka 抽象了文件的详细信息,并将日志或事件数据作为消息流提供了更清晰的抽象。这可以实现更低延迟的处理,并更轻松地支持多个数据源和分布式数据消费。与 Scribe 或 Flume 等以日志为中心的系统相比,Kafka 提供同样良好的性能、由于复制而提供更强的持久性保证以及更低的端到端延迟。

流处理

Kafka 的许多用户在由多个阶段组成的处理管道中处理数据,其中原始输入数据从 Kafka 主题中消费,然后聚合、丰富或以其他方式转换为新主题以供进一步消费或后续处理。例如,用于推荐新闻文章的处理管道可能会从 RSS 源中抓取文章内容并将其发布到“文章”主题;进一步处理可能会规范化或删除重复内容,并将清理后的文章内容发布到新主题;最后的处理阶段可能会尝试向用户推荐该内容。此类处理管道根据各个主题创建实时数据流图。从 0.10.0.0 开始,Apache Kafka 中提供了一个轻量级但功能强大的流处理库(称为Kafka Streams) 来执行上述数据处理。除了 Kafka Streams 之外,替代的开源流处理工具还包括Apache StormApache Samza

事件溯源

事件溯源是一种应用程序设计风格,其中状态更改被记录为按时间排序的记录序列。Kafka 对非常大的存储日志数据的支持使其成为以此风格构建的应用程序的出色后端。

提交日志

Kafka 可以充当分布式系统的一种外部提交日志。日志有助于在节点之间复制数据,并充当故障节点恢复数据的重新同步机制。Kafka 中的日志压缩功能有助于支持这种用法。在这种用法中,Kafka 类似于Apache BookKeeper项目。