Kafka的简单介绍-刘宇

Kafka的简单介绍-刘宇

  • 一、消息队列的介绍
    • 1、什么是消息队列
    • 2、消息队列的分类
      • 2.1、点对点(Peer-to-Peer)
      • 2.2、发布订阅(Pub/Sub)
    • 3、P2P和发布订阅的区别
    • 4、使用场景
    • 5、常见的消息系统
  • 二、Kafka的基本概念
    • 1、什么是Kafka
    • 2、四个核心API
    • 3、特点
    • 4、设计目标
    • 5、Kafka的核心概念

作者:刘宇
CSDN博客地址:https://blog.csdn.net/liuyu973971883
有部分资料参考,如有侵权,请联系删除。如有不正确的地方,烦请指正,谢谢。

一、消息队列的介绍

1、什么是消息队列

  • 消息 Message
    网络中两台计算机或者两个通讯设备之间传递的数据。如:文本、音乐、视频等。
  • 队列 Queue
    一种特殊的线性表(数据元素首尾相接),特殊之处在于只能够在队首删除元素,在队尾添加元素。
  • 消息队列 MQ
    是消息和队列的结合体,是用于保存消息的队列,是消息传输过程中的一个容器。主要提供了生存、消费等接口由外部调用,从而实现数据的存储和获取。

2、消息队列的分类

主要分为两种类别:点对点、发布订阅

2.1、点对点(Peer-to-Peer)

  • 一般基于Pull或者Polling接收数据
  • 当一个消息被发送到队列中时,该消息只能被一个接受者所消费,即使有多个消费者在同一个队列中监听这个消息。
  • 即支持异步的“即发即收”的消息传递方式,也支持同步请求/应答传递方式。
    Kafka的简单介绍-刘宇_第1张图片

2.2、发布订阅(Pub/Sub)

  • 一般基于Push消费数据,也可基于Pull或者Polling消费数据。
  • 当一个消息被发布到一个主题中时,可被多个订阅者所消费。
  • 解耦性比P2P更强
    Kafka的简单介绍-刘宇_第2张图片

3、P2P和发布订阅的区别

相同点:

  • 生产者生产的消息都是放到Queue中的,随后消费者再从Queue中消费数据。

不同点:

  • P2P模型包括:消息队列、发送者、消费者。
  • 一个生产者生成的消息只能被一个消费者消费。
  • 发布订阅模型包括:消息队列、主题、发布者、订阅者。
  • 一个消息可以有被多个消费者消费。

4、使用场景

  • 解耦 各系统之间通过消息系统的统一接口进行交换数据,无需了解彼此的存在
  • 冗余 部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险
  • 扩展 消息系统是统一的数据接口,各系统可独立扩展
  • 峰值的处理能力 消息系统可根据业务系统的处理能力从消息系统中获取并处理对应量的请求
  • 可恢复性 系统中部分键失效并不会影响整个系统,他恢复后仍然可从消息系统中获取并处理数据
  • 异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统中,等到需要处理时再进行处理

5、常见的消息系统

  • RabbitMQ,使用Erlang编写,支持多协议AMQP,XMPP,SMTP,STOMP。支持负载均衡、数据持久化。同时支持点对点和发布订阅模式。
  • Redis 基于Key-Value对的NoSQL数据表,同时支持MQ功能,可做轻量级队列服务使用。就入队操作而言,Redis对短消息(小于10kb)的性能比RabbitMQ好,长消息比RabbitMQ差。
  • ZeroMQ 轻量级,不需要单独的消息服务器或者中间件,应用程序本身扮演该角色,Peer-to-Peer。他实际上是一个库,需要开放人员自己组合多种技术,使用复杂度高。
  • ActiveMQ 使用JMS实现,Peer-to-Peer,支持持久化,XA(分布式)事务。
  • Kafka/Jafka 高性能跨语言的分布式发布/订阅消息系统,数据持久化、全分布式、同时支持在线和离线处理。
  • MetaQ/RocketMQ 纯Java实现,发布/订阅消息系统,支持本地事务和XA分布式事务。

二、Kafka的基本概念

1、什么是Kafka

Kafka是分布式的发布/订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,于2010年12月开源,成为Apache的顶级项目。Kafka是高吞吐量的、持久性的、分布式发布/订阅消息系统。他主要用于处理活跃live的数据(登录、刘磊、点击、分享、喜欢等用户行为产生的数据)。

Kafka的简单介绍-刘宇_第3张图片

2、四个核心API

  • Producer API:允许一个应用程序不发一串流式的数据到一个或者多个topic。
  • Consumer API:允许一个应用程序订阅一个或者多个topic,并且对发布给他们的流式数据进行处理。
  • Streams API:允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
  • Connector API:允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接一个关系型数据库,捕捉表的所有变更内容。

3、特点

  • 高吞吐量
    可以满足美妙百万级别消息的生产和消费
  • 持久性
    有一套完善的消息存储机制,确保消息的高效安全的持久化
  • 分布式
    基于分布式的扩展和容错机制;Kafka的数据都会复制到几台服务器上,当某一台故障失效时,生产者和消费者转而使用其他的服务器
  • 健壮性

4、设计目标

  • 高吞吐率 在廉价的商用机器上单机可支持每秒100万条消息的读写
  • 消息持久化 所有消息均可被持久化到磁盘,无消息丢失,支持消息重放
  • 分布式 Producer,Broker,Consumer均支持水平扩展
  • 同时适用在线流处理和离线批处理

5、Kafka的核心概念

  • Topic:主题,Kafka处理消息的不同分类。
  • Broker:消息服务器代理,Kafka集群中的一个Kafka服务节点称为一个broker,主要存储消息数据。存在硬盘中,每个topic都是有分区的。
  • Partition:Topic的物理上的分区,一个topic在broker中被分为1个或多个partition,分区在创建topic的时候指定。
  • Message:消息,是通信的基本单位,每个消息都属于一个partition。
  • Producer:消息和数据的产生者,向Kafka的一个topic发布消息。
  • Consumer:消息和数据的消费者,处理指定topic发布的消息。
  • Zookeeper:协调Kafka的正常运行。

你可能感兴趣的:(Kafka,kafka,消息中间件)