最全面的Kafka概述

目录

一.什么是消息队列

1.消息队列的基本架构

2.消息队列常用场景

3.消息队列的特点

4.点对点消息系统

5.发布 - 订阅消息系统

二.Kafka概述

1.什么是Kafka

2.kafka的架构

3.Kafka的消息存储

4.Kafka的生产者消费者模型。

5.Kafka有哪些特点

6.Zookeeper集群的作用

7.Kafka为什么这么快?

8.消费状态两种维护方式比较(Client vs.Server)

9.Kafka与其他消息队列中间件对比


一.什么是消息队列

顾名思义,消息队列是一种应用间的通信方式,消息就是是指在应用之间传送的数据,它也是进程通信的一种重要的方式。

1.消息队列的基本架构

最全面的Kafka概述

  • producer:消息生产者。
  • broker:消息处理中心。
  • consumer:消息消费者。

2.消息队列常用场景

  • 系统之间的解耦。
  • 高并发下的流量消峰(淘宝双十一等抢购活动)。
  • 异步通信(串行变并行)。

3.消息队列的特点

  • 基本上都基于生产者消费者模式。
  • 必须保证数据的可靠性传输。

4.点对点消息系统

在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从该队列中消失。

最全面的Kafka概述

5.发布 - 订阅消息系统

在发布 - 订阅系统中,消息被保留在主题中。 与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。

最全面的Kafka概述

https://www.w3cschool.cn/apache_kafka/apache_kafka_introduction.html

二.Kafka概述

1.什么是Kafka

Kafka是一个分布式消息队列,它的消息保留在磁盘上,并在群集内复制以防止数据丢失。 它基于构建ZooKeeper服务构建。也可以与Storm和Spark非常好地集成,用于实时流式数据分析。

2.kafka的架构

最全面的Kafka概述

  • producer:消息生产者。
  • consumer:消息消费者。
  • broker:kafka集群的server,负责处理消息读、写请求,存储消息。
  • topic:消息队列/分类。

3.Kafka的消息存储

最全面的Kafka概述

  1. 一个topic分成多个partition,每个partition内部消息强有序,其中的每个消息都有一个序号叫offset。
  2. 一个partition只对应一个broker,一个broker可以管多个partition。
  3. 消息直接写入文件,并不是存储在内存中。
  4. 消息根据时间策略删除,而不是消费完就删除(默认一周)。
  5. producer自己决定往哪个partition写消息,有轮询的负载均衡和基于message<K,V>中K的hash策略两种方式,hash容易造成数据的倾斜,所以推荐轮询。
  6. kafka里面的消息是有topic来组织的,可以理解为一个队列,为了实现并行,每个topic又分为很多个partition,每个partition都是有序的队列,其中每个消息都有个序号,比如0到12,从前面读往后面写。
  7. 一个partition对应一个broker,一个broker可以管多个partition,比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。

4.Kafka的生产者消费者模型。

最全面的Kafka概述

  1. consumer自己维护消费到哪个offset,通过从Zookeeper上拉取,或者自己实现。
  2. 每个consumer都有对应的group。
  3. group内是queue消费模型,各个consumer消费不同的partition,一个消息在group内只消费一次,各个group各自独立消费,互不影响。

5.Kafka有哪些特点

  1. 消息系统的基本特点:符合基本的生存者消费者模型;partition内部是FIFO的,partition之间呢不是FIFO的,当然我们可以把topic设为一个partition,这样就是严格的FIFO。
  2. 高性能:单节点支持上千个客户端,百MB/s吞吐。
  3. 持久性:消息直接持久化在普通磁盘上且性能好。直接写到磁盘里面去,就是直接append到磁盘里面去,这样的好处是直接持久话,数据不会丢,第二个好处是顺序写,然后消费数据也是顺序的读,所以持久化的同时还能保证顺序读写。
  4. 分布式:Kafka本身就是基于集群的,可做数据副本冗余,就是同一份数据可以到不同的broker上面去,也就是当一份数据,磁盘坏掉的时候,数据不会丢失;流量负载均衡;扩展性强。
  5. 灵活性:消息长时间持久化策略,消费方式非常灵活,第一原因是消息持久化时间跨度比较长,一天或者一星期等;Client维护消费状态,消费状态自己维护消费到哪个地方了,可以自定义消费偏移量。

6.Zookeeper集群的作用

  1. 存储kafka数据的元数据。
  2. 存储消费偏移量(用于保证消费“至少一次,严格一次”)

7.Kafka为什么这么快?

  1. 顺序读,顺序写。
  2. 零拷贝 (相比非零拷贝,在文件进行网络传输时,少了两次拷贝过程)。

https://blog.csdn.net/lcgoing/article/details/85231003

零拷贝:“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。 注:用户空间可以理解为JVM。

最全面的Kafka概述

最全面的Kafka概述

8.消费状态两种维护方式比较(Client vs.Server)

最全面的Kafka概述

9.Kafka与其他消息队列中间件对比

  1. RabbitMQ:分布式,支持多种MQ协议,重量级。
  2. ActiveMQ:与RabbitMQ类似。
  3. ZeroMQ:以库的形式提供,使用复杂,无持久化。
  4. Redis:单机、纯内存性好,持久化较差。
  5. Kafka:分布式,较长时间持久化,高性能,轻量灵活。