Kafka是一个分布式流平台(不只是消息系统),具备以下关键特性:
发布-订阅消息流(类似于消息队列或企业消息系统)
同时支持离线数据处理和实时数据处理
以容错持久的方式存储消息流
支持在线水平扩展、高吞吐
Kafka支持两类应用程序:
构建实时流数据管道,能够可靠地在系统之间获取数据
构建实时流应用程序,能够对数据流进行转换或响应
Kafka应用特性如下:
Kafka可以运行在一个或多个服务器上,跨越多个数据中心
Kafka将消息流存储在topic中
Kafka消息由键(key)、值(value)和时间戳(timestamp)组成
Kafka依赖Zookeeper,Zookeeper负责维护Kafka的元数据(broker、topic、partition)等信息,实现Kafka的动态管理。如图-1所示,Kafka架构主要由Broker、Producer、Consumer以及Consumer Group组成。其中:
Broker:Kafka包含的一个或多个服务器。
Producer:负责发布消息到Kafka Broker。
Consumer:从Kafka Broker读取消息的客户端。
Consumer Group:每个Consumer属于一个特定的Consumer Group。
替换传统消息系统
相比于传统的消息系统,Kafka具备更好的吞吐量、低延迟、分区、副本、容错等特性,有利于处理大规模的消息。
网站活动追踪
Kafka可以用来记录用户的各种活动,例如网页浏览、搜索等活动,这些活动被发布到Kafka的topic中,可用于实时监控处理、实时监测或加载到Hadoop或离线数据仓库中。
指标监控
Kafka可以用于实时监控性能指标等数据。
日志聚合
日志聚合通常从服务器收集物理日志文件,并将它们放在日志收集中心(可以是文件服务器或HDFS)进行处理。Kafka抽象出文件的细节,将日志或事件数据更清晰地抽象为消息流,能够保证更低延迟的处理,也更容易支持多个生产者和消费者。
流处理
流处理通常包含多个阶段,可以通过Kafka进行中转。例如新闻推荐场景中,新闻内容可以从“articles”主题获取,经过进一步处理得到新内容后再推荐给用户。
提交日志