下面是Apache Kafka的一些流行用例的描述。有关这些领域的一些概述,请参阅此博客文章。
消息传递(Messaging)
Kafka 很好地取代了一个更传统的消息broker。消息brokers 的使用基于各种原因(从数据生产者解耦、缓冲未处理的消息等)。与大多数消息传递系统相比,Kafka具有更好的吞吐量、内置分区、复制和容错性,这使得它成为大规模消息处理应用的良好解决方案。
在我们的经验中,消息传递的使用常常是相对低吞吐量的,但是可能需要很低的端到端延迟,并且通常需要基于Kafka提供的强持久化保证。
在这个领域中,Kafka 与传统的消息传递系统如ActiveMQ或RabbitMQ相媲美。
网站活动跟踪(Website Activity Tracking)
Kafka最初的使用场景是为了能够将用户活动跟踪管道重建为一组实时发布-订阅的需要。这意味着站点活动(页面视图、搜索或用户可能采取的其他操作)被发布到中心主题,每个活动类型有一个主题。这些提要可用于订阅一系列用例,包括实时处理、实时监视,以及加载到Hadoop或离线数据仓库系统中进行离线处理和报告。
活动跟踪通常是信息量非常大,因为每个用户页面视图生成了许多活动消息。
Metrics
Kafka 通常用于监测数据。这涉及从分布式应用程序中聚合统计数据然后集中处理。
日志聚合(Log Aggregation)
许多人使用Kafka 作为日志聚合解决方案的替代者。日志聚合通常从服务器收集物理日志文件,并将它们放在中心位置(可能是文件服务器或HDFS)进行处理。Kafka 抽象了文件的细节,并将日志或事件数据作为消息流进行了更为抽象的抽象。这允许较低的延迟处理和更容易地支持多个数据源和分布式数据消耗。与Scribe或Flume等以日志为中心的系统相比,Kafka提供了同样良好的性能,由于复制的存在导致更强的持久化保证以及更低的端到端延迟。
流处理(Stream Processing)
Kafka 的许多用户使用由多个阶段组成的处理流水线中处理数据,其中原始输入数据在Kafka 主题中消费,然后聚合、丰富或以其他方式转换为新主题以进一步消费或后续处理。例如,用于推荐新闻文章的处理管道可能从RSS提要中抓取文章内容并将其发布到“文章”主题;进一步的处理可能规范化或去重复该内容,并将已清理的文章内容发布到新主题;最终处理阶段可能为尝试向用户推荐该内容。这样的处理流水线基于单个主题创建实时数据流的图形。从0.10.0.0开始,Apache Kafka中提供了一个轻量级但功能强大的流处理库Kafka Streams,用于执行上述数据处理。除了Kafka Streams之外,其他开源流处理工具还包括Apache Strom和Apache Samza。
事件溯源(Event Sourcing)
事件溯源是一种应用程序设计模型,其中状态变化被记录为时间顺序的记录序列。Kafka对非常大量的存储日志数据的支持使它成为应用这种风格构建的应用程序的很好地后端。
日志提交(Commit Log)
Kafka 可以作为分布式系统的一种外部提交日志。日志有助于在节点之间复制数据,并作为故障节点的重新同步机制来恢复其数据。Kafka 中的日志压缩特性有助于支持这种用法。在这种用法中,Kafka 类似于Apache BookKeeper项目。