Kafka简介

什么是消息队列

消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它。 分布式消息传递基于可靠消息队列的概念。 消息在客户端应用程序和消息传递系统之间异步排队。 有两种类型的消息模式可用,一种是点对点,另一种是发布 - 订阅(pub-sub)消息系统。 大多数消息模式遵循 pub-sub 。

点对点消息系统

在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从该队列中消 失。该系统的典型示例是订单处理系统,其中每个订单将由一个订单处理器处理,但多个订单处理器也可以同时工作。 下图描述了结构。
Kafka简介

发布 - 订阅消息系统

在发布 - 订阅系统中,消息被保留在主题中。 与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。 在发布 - 订阅系统中,消息生产者称为发布者,消息使用者称为订阅者。 一个现实生活的例子是Dish电视,它发布不同的渠道,如运动,电 影,音乐等,任何人都可以订阅自己的频道集,并获得他们订阅的频道时可用。
Kafka简介

Kafka的定位

Kafka简介
Apache Kafka起源于LinkedIn,后来于2011年成为开源Apache项目,然后于2012年成为 First-class Apache项目。Kafka是用Scala和Java编写的。

消息系统,提到kafka,不太熟悉或者稍有接触的开发人员,第一想法可能会觉得它是一个消息系统。其实Kafka的定位并不止于此。

Kafka官方文档介绍说,Apache Kafka是一个分布式流平台,并给出了如下解释: 流平台有三个关键的能力:

  • 发布订阅记录流,和消息队列或者企业级消息系统类似。
  • 以可容错、持久的方式保存记录流
  • 当记录流产生时就进行处理

Kafka通常用于应用中的两种广播类型:

  • 在系统和应用间建立实时的数据管道,能够可信赖的获取数据。
  • 建立实时的流应用,可以处理或者响应数据流。

由此可见,kafka给自身的定位并不只是一个消息系统,而是通过发布订阅消息这种机制实现了流平台。 其实不管kafka给自己的定位如何,他都逃脱不了发布订阅消息的底层机制。我们讲解的重点,也是kafka发布订阅消息的特性。 Kafka和大多数消息系统一样,搭建好kafka集群后,生产者向特定的topic生产消息,而消费者通过订阅topic,能够准实时的拉取到该topic新消息,进行消费。如下图:
Kafka简介

Kafka特性

    1. 支持多个生产者,多个消费者
    1. 消息持久化
    1. 高吞吐量
    1. 可扩展性

尤其是高吞吐量(Kafka非常快,并保证零停机和零数据丢失),是他的最大卖点。kafka 之所以能够实现高吞吐量,是基于他自身优良的设计,及集群的可扩展性。 Kafka应用场景

    1. 消息系统
    1. 日志系统
    1. 流处理