Kafka-使用场景

消息中间件

Kafka是众多传统消息中间件的一个很好的替代品。消息中间件有一系列被选择使用的原因–1.与上游消息生产者解耦。2.缓冲未处理的消息等等。与其他绝对多数的消息中间件对比,Kafka在吞吐量、partition(分区)概念的设计与构建、replica(备份)机制、容错机制等均有更优异的表现。而这些特性在应对有海量的、可扩展消息的处理的应用的需求时,是一个很好的解决方案。

在我们的经验中,相比较来说,使用消息中间件的应用程序一般是低吞吐量的,但一般也是要求点到点低延迟的,且要求数据持久化的高可靠性,而这几个功能Kafka提供。

网站活动跟踪

Kafka的初始用例能够重构一个用户活动跟踪管道,作为实时发布-订阅的反馈系统。这意味着网站活动(页面浏览,搜索,或用户可能采取的其他行为)是发布到中央topics,每一种行为类型一种topic。这些反馈内容可供实时处理应用、实时监控应用订阅,并加载到Hadoop或离线数据仓库系统进行离线处理和报告。

活动跟踪数据通常是海量的,因为用户每一次的页面浏览,都会生产很多行为活动记录。

监控统计

Kafka通常用于操作的监控数据。这意味着,从分布式应用程序中聚集统计数据,并生产集中的操作数据记录。。

日志聚合

Kafka被广泛使用用作日志收集、聚合替代的解决方案。日志收集、聚合通常从servers上收集物理日志文件,并将日志文件汇总到一个中央结点(一个文件服务器或者HDFS)进行处理。Kafka脱离了文件的细节进行了抽象,并给出了一个更简洁的抽象模型,将日志或事件消息的数据作为消息数据流。这一功能使得处理过程低延时,并使得支持多数据源和分布式数据消费更加简单。与日志中心化处理的系统如Scribe和Flume相比较,Kafka提供同样优秀的性能,更可靠的持久化确认机制(replica机制的存在),和更低的点到点的延迟。

流式处理

Kafka处理数据一般通过由多个阶段组成的数据处理管道,首先topics的数据作为原始数据被消费,然后数据被聚合、进一步丰富数据内容、或者转换传输到新的topics,等待进一步消费或后续处理。 例如,一个推荐新闻、文章的处理管道可能从RSS订阅反馈进行内容爬取,然后将数据发布到名为“articles”的topic下;进一步处理可能会清洗数据,使其变为标准化并去重,然后将清洗后的数据发布到一个新的topic;最后一步处理阶段会尝试向用户推荐数据内容。这样的数据处理管道根据各个topic创建实时数据流图。Kafka从0.10.0.0版本开始,提供一个轻量级但功能强大的流处理库–Kafka Streams.可以在Apache卡夫卡执行这样的数据处理如上所述。 除了Kafka Streams,可以选择开源流处理工具包括Apache Storm和Apache Samza作为替代。

事件源

事件源是一种应用的设计模式,状态的变化按照时间顺序存储到log的队列中。Kafka支持存储海量的数据,这一特性使得应用可按照这一风格进行后台应用的构建。

提交日志

Kafka可以为分布式系统作为一种外部的提交日志进行服务。Kafka的日志功能帮助完成结点之间的数据备份,并对于宕机的结点,通过“重新同步”的机制,帮助完成存储数据。Kafka的日志压缩功能支持这一用例的需求功能。

参考资料

http://kafka.apache.org/documentation/