这是我参加第五届青训营伴学笔记创作活动第5天
- 业界消息队列对比
- Kfafa:分布式的、分区的、多副本的日志提交服务。在吞吐场景下出色。
- RooketMQ:低延迟、强一致、高性能、高可靠、容量亿万级、灵活可扩展性,在实际应用场景中应用较广
- Pulsar:集消息、存储、轻量化函数式计算为一体,采用存储计算分离的架构设计。
- BMQ:也是采用存储、计算分离,初期是承接高吞吐的离线业务场景逐步替代对应的Kafka集群
- 消息队列KAFAka的使用场景
- 如何使用kfa
- 创建集群
- 增加topic(设置分片数量)
- 编写生产者逻辑(引入的SDK、配置集群、topic参数,初始化生产者调用send方法将信息发送)
- 编写消费者逻辑查(引入的SDK、配置集群、topic参数,初始化消费者调用poll方法将信息发送) 3.Kafa处理消息流程如下
- topic:可以理解为不同业务场景就是不同的topic,是kafka中的逻辑队列
- cluster:是kafka的物理集群,每个集群中都可以有不同的topic
- Producer:是消息的生产端,负责将消息业务发送到topic中
- Consumer:消息的消费端,负责消费已经发送到topic中的数据
4.kafka的框架
-
AooKeeper:该模块主要是存储集群中的元数据信息:比如副本等分配信息、controller计算好的方案
-
Broker表示kafka的节点
-
- 消息的处理与保存
-
-
如何批量发送数据,通过对生产者产生的消息进行压缩处理,之后保存在集群中的每一个节点broker上
-
-
在broker中保存的文件如下方式保存:每一个broker中分布着不同topic的不同分片
-
-
按照磁盘的读取方式,将消息按照先来先写的方式进行写入在broker中
- 2 消息的寻找与消费
-
Consumer发送FetchRequest请求消息数据,Broker将指定Offset出的数据,按照时间窗口和消息大小窗口发送给consumer
-
-
查询数据文件根据Offset按照二分查找的方式进行:二分法找到小于目标Offset的最大索引位置,之后从当前位置遍历找到目标Offset,进而找到存储的数据文件
-
-
获取数据
-
consumer从Broker中获取数据,通过sendfile方式从磁盘读到io的缓冲区中,通过read Buffer发送数据。在producer将数据保存在broker中时,采用mmap方式,实现快速写
-
3. - consumer接收数据 在consumer接受到数据后如何将partition对consumer联系起来
-
解决方式一:
-
手动分配,按照业务需求为consumer选择对应的partition
-
解决方式二:
-
kafka有一个机制rebalance,可以为自动分配partition