消息队列
-
是什么消息队列
- 保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用.
-
消息队列应用场景
-
消息队列 :建立实时流数据管道,以可靠地在系统或应用程序之间获取数据。
-
数据处理:构建实时的流数据处理程序来转换或处理数据流。
广泛运用在搜索服务、直播服务、订单服务、支付服务中。
-
常见消息队列
- Kafka使用场景、架构、高级特性
- Pulsar使用场景、架构、高级特性
-
Rocket使用场景、架构、高级特性
-
业界消息队列对比:
Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。
RocketMQ: 低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广。
Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体采用存算分离的架构设计。
BMQ: 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。
消息队列-Kafka
基本概念:Producer、Cluster、Consumer、Topic、Partition
- Producer(生产者) : 产生消息的一方。
- Consumer(消费者) : 消费消息的一方。
- Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。
同时,你一定也注意到每个 Broker 中又包含了 Topic 以及 Partition 这两个重要的概念:
- Topic(主题) : Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。
- Partition(分区) : Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker 。这正如我上面所画的图一样。
Kafka 中的 Partition(分区) 实际上可以对应成为消息队列中的队列
Kafka 的多副本机制了解吗?带来了什么好处?
还有一点我觉得比较重要的是 Kafka 为分区(Partition)引入了多副本(Replica)机制。分区(Partition)中的多个副本之间会有一个叫做 leader 的家伙,其他副本称为 follower。我们发送的消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步。
生产者和消费者只与 leader 副本交互。你可以理解为其他副本只是 leader 副本的拷贝,它们的存在只是为了保证消息存储的安全性。当 leader 副本发生故障时会从 follower 中选举出一个 leader,但是 follower 中如果有和 leader 同步程度达不到要求的参加不了 leader 的竞选。
Kafka 的多分区(Partition)以及多副本(Replica)机制有什么好处呢?
- Kafka 通过给特定 Topic 指定多个 Partition, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力(负载均衡)。
- Partition 可以指定对应的 Replica 数, 这也极大地提高了消息存储的安全性, 提高了容灾能力,不过也相应的增加了所需要的存储空间。
一条消息从生产到消费是如何处理的,Producer端逻辑、Broker端逻辑、Consumer端逻辑
在 Kafka 中,我们把产生消息的那一方称为生产者,比如我们经常回去淘宝购物,你打开淘宝的那一刻,你的登陆信息,登陆次数都会作为消息传输到 Kafka 后台,当你浏览购物的时候,你的浏览信息,你的搜索指数,你的购物爱好都会作为一个个消息传递给 Kafka 后台,然后淘宝会根据你的爱好做智能推荐,致使你的钱包从来都禁不住诱惑,那么这些生产者产生的消息是怎么传到 Kafka 应用程序的呢?发送过程是怎么样的呢?
具体的后续再加,哈哈,影响大家阅读体验了。 juejin.cn/post/684490…
<青训营ppt>