Kafka 教程
Apache Kafka 是一个分布式发布-订阅消息系统,具有高吞吐、低延时、可扩展、容错以及持久化存储等特点,使用 Kafka 可以方便地构建分布式应用程序。
Kafka 将消息保存在磁盘上,并在集群内复制以防止数据丢失。
Kafka 建立在 ZooKeeper 同步服务之上,能与 Apache Storm 和 Spark 很好地集成,进行实时流数据分析。
Apache Kafka 官网地址:https://kafka.apache.org/
1. Kafka 简介
Apache Kafka 是由 Apache 软件基金会开发的一个开源消息系统,使用 Scala 和 Java 编写。
Kafka 最初是由 LinkedIn 开发,并于 2011 年初开源。2012 年10 月从 Apache Incubator 毕业,成为 First-class Apache 项目。
Kafka 的目标是为处理实时数据提供一个统一的高吞吐、低延时的平台。
2. 什么是消息系统
消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,而不必担心如何共享数据。
消息传递模式有两种:一种是点对点的,另一种是发布-订阅(pub-sub)的消息传递系统。大多数消息传递模式遵循 pub-sub。
1) 点对点消息系统
在点对点系统中,消息将保留在队列中。一个或多个使用者可以使用队列中的消息,但是特定消息最多只能由一个使用者使用。使用者读取队列中的消息后,该消息将从该队列中消失。
点对点系统的典型示例是订单处理系统,其中每个订单将由一个订单处理器处理,但是多个订单处理器可以同时工作。
如下图所示:
2) 发布-订阅消息系统
在发布-订阅系统中,消息保留在主题中。与点对点系统不同,消费者可以订阅一个或多个主题,并消费该主题中的所有消息。
在发布-订阅系统中,消息生产者称为发布者,消息消费者称为订阅者。
一个真实的例子是Dish TV,它发布了体育,电影,音乐等不同的频道,任何人都可以订阅自己的频道集,并在订阅频道可用时获取它们。
如下图所示:
3. Kafka 用途
Kafka是一个分布式流式处理平台。
1) 主要功能
- 消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是Kafka被归类为消息队列的原因。
- 容错和持久方式存储消息流:Kafka会把消息持久化到磁盘,有效避免消息丢失的风险。
- 流式处理平台:在消息发布的时候进行处理,Kafka提供了一个完整的流式处理类库。
2) Kafka 主要用途
- 消息队列:构建信息系统,可靠地在应用程序传递数据。
- 数据处理:构建实时的流数据处理程序来转换或处理数据流。
3) Kafka 使用场景
- 指标 - Kafka 操作监控数据,汇总来自分布式应用程序的统计信息,生成集中的运行数据指标。
- 日志聚合 - Kafka 从多种服务中收集日志,并以标准格式提供给多个消费者。
- 流处理 - 提供给 Storm 和 Spark 流处理框架进行数据处理,并将处理后的数据写入一个新的主题,供用户和应用程序使用。
4. Kafka 优势
- 高吞吐、低延时 - Kafka 能够达到百万级的消息吞吐量,延迟可达毫秒级。
- 持久化存储 - Kafka可以将消息直接持久化在普通磁盘上,且磁盘读写性能优异。
- 分布式可扩展 - Kafka集群支持热扩展,Kaka集群启动运行后,用户可以直接向集群添加节点。
- 容错性 - Kafka会将数据备份到多台服务器节点,集群中任意一个 broker 节点宕机,Kafka 仍能对外提供服务。
- 多语言支持 - Kafka支持Java、.NET、PHP、Python、Go等多种语言。
5. 分布式系统消息系统对比
下一章:Kafka 基本概念
Kafka 基本概念::Kafka 是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。Kafka 基本概念包括:Topic、Producer、Consumer、Cluster 和 Broker。Kafka producers(生产者)通过网络将消息发送到 Kafka 集群,集群负责保存消息,并向消费者提供消息。Kafka