这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
什么是消息队列
消息队列,指的是保存消息的容器,本质上是队列,但是这个队列需要高吞吐,高并发,高可用
可用消息队列的对比
- Kafka: 分布式的,分区的,多副本的日志提交服务,在高吞吐场景下发挥出色
- RocketMQ: 低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar: 是下一代云原生分布式消息流平台,集消息,存储,轻量化函数式计算的】为一体,采用存算分离的架构
- BMQ: 存算分离
Kafka 的使用
- 创建集群
- 新增topic
- 编写生产者逻辑
- 编写消费者逻辑
-
Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到Kafka中。
-
Consumer:消费者,也就是接收消息的一方。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。
-
Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
-
Broker:服务代理节点。对于Kafka而言,Broker可以简单地看作一个独立的Kafka服务节点或Kafka服务实例。一个kafka集群由多个 broker 组成。一个 broker可以容纳多个 topic。
-
Topic:Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到Kafka集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费
-
Partition:主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说,Kafka保证的是分区有序而不是主题有序。
为什么Kafka支持高可用
- Producer 批量发送消息,减少网络IO次数
- 通过数据压缩,减小消息大小
- 通过顺序写的方式持久化,提高写入效率