以下是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。