消息队列之kafka |青训营

29 阅读2分钟

kafka的结构及对应功能

Topic:逻辑队列(不同的业务场景)

Partition:Topic的分区不同的分区可以并发处理

一个Partition中有多个Replica(副本),LeaderReplica将会从ISR中选出
offset:消息在partition内的相对位置信息,可以理解为唯一的ID,在partition内部严格递增

Producer(生产者,负责将业务消息发送到Topic中)

批量发送:(处理的数据一条一条发送过慢的问题)将多条数据存放到Batch再一次性发出,这样就可以减少IO次数,从而加强发送能力 压缩:若Batch的宽度过大可能会出现网络宽度不够用,这事就用到kafka中的压缩机制,减少消息大小,目前支持Snappy,Gzip等压缩算法

Broker

磁盘结构:移动磁盘找对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本。 数据的存储:Broker最终通过日志存储到对应磁盘中,采用顺序写的方式进行写入,以提高写入效率。 消息的寻找:Consumer通过发送Fetch Request请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer。 偏移量索引文件:通过二分法找到小于目标offerset的最大索引位置 时间戳索引文件:二分找到小于目标时间戳最大的索引位置,通过寻找offset的方法找到最终数据。

Consumer

1.消费者,负责消费Topic中的消息

Rebalance:对于原本Partition中的消费由手动操作完全由业务决定,变为更便利的操作。

ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

总结

kafka对数据的处理提供了很多的便利但同时也还存在不少欠缺如运营成本高,对于负载不均衡的场景解决方案复杂。