Kafka 教程

mysql

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 基本概念包括:Topic、Producer、Consumer、Cluster 和 Broker。Kafka producers(生产者)通过网络将消息发送到 Kafka 集群,集群负责保存消息,并向消费者提供消息。Kafka