[消息队列笔记|青训营笔记]

61 阅读2分钟

这是我参与「第五届青训营」伴学笔记活动的第十三天,今天初步了解了了kafka消息结构,相关概念以及消息分配方式。

kafka的流程

创建集群,增加topic,设置分区数量。引入sdk实现上游生产者逻辑,发送到topic中,最后将代码拉取出来进行业务处理。

基本概念

topic:逻辑队列,包含不同业务场景。

cluster:物理集群,建有不同topic,处理不同业务场景。

producer:将业务消息发送到topic中。

consumer:收到业务消息并处理。

partition:分区,不同分区可以并发处理。

offset:消息在分区中的id,严格递增。

follower:同步leader,差距过大会被队列。当发生宕机可以再ISR中选出副本继续工作。

controller:计算分配副本。

zookeeper:存储元信息,分配分区信息。

批量发送:按批量batch发送消息减少IO次数。

数据压缩:支持snappy,zstd压缩算法。

broker消息结构

1.存在大量副本以日志形式写入到磁盘中,切分成不同的logsegment,每个logment包含日志文件,偏移量索引文件,时间戳索引。

2.采用顺序写入,用二分查找小于目标文件的offset的最大文件。

3.对于时间戳文件相当于在offset文件上加了二级索引,同样使用二分查找小于目标文件时间戳的最大时间戳文件。

4.零拷贝:从磁盘把数据读到内核空间然后发送给网卡直接发送到消费者进程。降低了内存拷贝次数。

消息的接收

1.手动分配:有业务决定消费哪一个分区,会有进程启停,造成中断,无法自动容灾

2.high level:通过协调者进行自动分配。若发生宕机当所属分区分配给其他机器,若增加机器,则将其余的机器的分区调过来。

  1. rebelence:找到负载最低的broker,并返回所属协调者,当消费者都收到不同协调者的请求时,进行选取各自协调者中对应消费者的leader。leader计算分配的策略,选完leader,在总共经过三次发送请求后,把分配方案发送到协调者。