本篇博客主要包含以下三个内容 :

  • 什么是kafka?
  • 为什么选择kafka?
  • 消息队列里的两种模式。

一. 什么是kafka

首先附上 kafka官网链接: 可以看到官网对kafka的描述如下 :
A distributed streaming platform(分布式的流处理平台)
这应该就是kafka最简洁精准的定位。
首页里还有如下描述 :

PUBLISH & SUBSCRIBE
Read and write streams of data like a messaging system.

发布和订阅
读取和写入数据流,如消息传递系统。

PROCESS
Write scalable stream processing applications that react to events in real-time.

处理
编写可扩展的流处理应用程序,实时响应事件。

STORE
Store streams of data safely in a distributed, replicated, fault-tolerant cluster.

储存
将数据流安全地存储在分布式,复制的容错集群中。

从官网首页的简单介绍中,我们已经能够大致知道kafka的特性和功能~
接下来,介绍一下为什么选择kafka

二.为什么选择kafka

  • kafka首先是一个消息系统,那么作为一个消息系统,有哪些好处呢?可以参考下面的博客。
    为什么选择消息系统
  • 那么kafka相较于传统的消息系统,又有哪些好处呢?
  • 活动数据
    网站用户行为相关数据,例如PV(page view 页面浏览量)、UV(Unique Visitor 独立访客访问数)等。
  • 运营数据
    监控系统性能指标(cpu利用率、负载,内存使用率,磁盘利用率,IO性能)

以上这些数据的特点:

  • 数据不可变
  • 数据量大
  • 需要实时处理

传统消息系统并不能很好的支持。
这个时候,就该kafka大展身手了!

仅凭上述介绍,还不足以对kafka有一个最基本的了解,
真正深入学习kafka之前,还需要知道消息队列中的两种模式

三. 消息队列中的点对点和发布订阅

点对点(point to point)
发布订阅(publish subscribe)
这两种模式的主要区别是: 发送到队列的消息能否被重复消费(多订阅)

生产者发送一条消息到queue,只有一个消费者能收到。

  • 发布订阅模式

seatunnel的kafka插件_kafka


  • 发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。
小结

queue实现了负载均衡,一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有 一个可用的消费者,一个queue可以有很多消费者,他们之间实现了负载均衡, 所以Queue实现了一个可靠的负载均衡。

topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到一个消息的拷贝, 只有在消息代理收到消息时有一个有效订阅时的订阅者才能得到这个消息的拷贝。

疑问 发布订阅模式下,能否实现订阅者负载均衡消费呢?

当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic消息即分组订阅, 这样订阅者很容易实现消费能力线性扩展。模型如下图所示:

seatunnel的kafka插件_kafka_02

kafka的消息队列

seatunnel的kafka插件_负载均衡_03

Kafka只支持消息持久化,消费端为拉模型,消费状态和订阅关系由客户端端负责维护,消息消费完后不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以了。

同一个订阅组会消费topic所有消息,每条消息只会被同一个订阅组的一个消费节点消费,同一个订阅组内不同消费节点会消费不同消息。