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