这是我参与「第五届青训营」伴学笔记创作活动的第14天。今天看的是消息队列相关知识。
消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列支持高吞吐,高并发和高可用。目前主流的消息队列有Kafka,RocketMQ,Pulsar和BMQ。Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广。Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体采用存算分离的架构设计。BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。
Kafka的使用步骤:首先创建一个Kafka集群;下一步在集群中创建一个topic,并且设置好分片数量;下一步引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,编写生产者逻辑;最后引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,编写消费者逻辑。其中,Topic是逻辑队列,不同业务就是不同的topic,本业务的数据都存在本业务的topic中;Cluster是物理集群,每个集群中可以建立多个不同的Topic;Producer是生产者,负责将业务消息发送到Topic中;Consumer是消费者,负责消费Topic中的消息。ConsumerGroup是消费者组,不同组Consumer消费进度互不干涉。Partition是分片,通常topic会有多个分片,不同分片的直接消息可以并发处理,这样提高了单个Topic的吞吐。Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。Offset是消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。每个分片有多个 Replica, Leader Replica将会从ISR中选出。Replia是分片的副本,分布在不同的机器上,可用来容灾。Leader对外服务,Fallower异步去拉取Leader的数据进行一个同步,如果leade挂掉了,可以将Follwer提升成Leader再对外进行服务。ISR是同步中的副本,不在IRA中的副本是不允许提升成leader的。