使用案例
以下是 Apache Kafka® 的一些常见使用案例的描述。
有关其中许多领域的实际应用概述,请参阅此博客文章。
Kafka 可以很好地替代更传统的消息代理。
使用消息代理的原因有很多(将处理与数据创建者分离、缓冲未处理的消息等)。
与大多数消息传递系统相比,Kafka 具有更好的吞吐量、内置分区、复制和容错功能,这使其成为一个很好的
适用于大规模消息处理应用程序的解决方案。根据我们的经验,消息传递用途通常吞吐量相对较低,但可能需要较低的端到端延迟,并且通常依赖于强大的
Kafka 提供的持久性保证。
在这个领域,Kafka 可与 ActiveMQ 或 RabbitMQ 等传统消息传递系统相媲美。
Kafka 的原始用例是能够将用户活动跟踪管道重建为一组实时发布-订阅源。
这意味着网站活动(页面查看、搜索或用户可能执行的其他操作)将发布到中心主题,每个活动类型一个主题。
这些订阅源可用于一系列使用案例,包括实时处理、实时监控和加载到 Hadoop 或
用于离线处理和报告的离线数据仓库系统。活动跟踪通常非常高,因为每个用户页面视图都会生成许多活动消息。
Kafka 通常用于运营监控数据。
这涉及聚合来自分布式应用程序的统计数据,以生成运营数据的集中馈送。许多人使用 Kafka 作为日志聚合解决方案的替代品。
日志聚合通常从服务器收集物理日志文件,并将它们放在一个中心位置(可能是文件服务器或 HDFS)进行处理。
Kafka 抽象出文件的细节,并以消息流的形式提供更清晰的日志或事件数据抽象。
这允许更低的处理延迟,并更轻松地支持多个数据源和分布式数据使用。
与 Scribe 或 Flume 等以日志为中心的系统相比,Kafka 提供了同样好的性能、更强的持久性保证(由于复制)、
以及更低的端到端延迟。Kafka 的许多用户在由多个阶段组成的处理管道中处理数据,其中原始输入数据从 Kafka 主题中使用,然后
聚合、丰富或以其他方式转换为新主题以供进一步使用或后续处理。
例如,用于推荐新闻文章的处理管道可能会从 RSS 源中抓取文章内容并将其发布到“文章”主题;
进一步的处理可能会规范化或删除重复的内容,并将清理后的文章内容发布到新主题;
最终处理阶段可能会尝试向用户推荐此内容。
此类处理管道根据各个主题创建实时数据流图。
从 0.10.0.0 开始,Apache Kafka 中提供了一个名为 Kafka Streams 的轻量级但功能强大的流处理库,用于执行上述数据处理。
除了 Kafka Streams,其他开源流处理工具还包括 Apache Storm 和 Apache Samza。
事件溯源是一种应用程序设计风格,其中状态更改被记录为
按时间排序的记录序列。Kafka 对非常大的存储日志数据的支持使其成为以这种样式构建的应用程序的出色后端。Kafka 可以用作分布式系统的一种外部提交日志。日志有助于在节点之间复制数据并充当重新同步
失败节点恢复其数据的机制。
Kafka 中的日志压缩功能有助于支持这种用法。
在这个用法中,Kafka 类似于 Apache BookKeeper 项目。