一、Kafka介绍
二、消息队列的分类
至多一次,常见的rabbitmq,rocketmq都是这种方式,通过ACK机制确认消息已被消费者消费,此时会将消息删除;没有限制则主要是通过消费者上传的offset(偏移量)来确认消费消息的初始位置,同一消息可以被反复多次消费,一直到达到指定条件,比如kafka是默认保留7天,7天后则会被删除。
三、kafka基础架构
Kafka集群以Topic形式负责分类集群中的Record,每一个Record属于一个Topic,每个Topic底层都会对应一组分区的日志用于持久化Topic中的Record。同时在Kafka集群中,Topic的每一个日志分区都一定会有一个Broker担当该分区的Leader,其他的Broker担当该分区的follower。Leader负责分区数据的读写操作,follower负责同步该分区的数据。这样如果分区的Leader宕机,该分区的其他follower会选取新的Leader继续负责该分区数据的读写,其中集群中的Leader的监控和Topic的部分元数据是存储在Zookeeper中。
分区越大,理论上可以处理的并发读写也越大。
四、kafka消费者和消费者组![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/10fd5240ac2990da48d6fba46380f935.png)
消费者组
注意:消费者组内消费者的数量大于topic中分区的数量,多出的消费者正常情况下无法消费消息,但是当其他消费者无法正常工作时,它可以充当备份,顶上去。
五、kafka高性能之道
1.顺序IO和MMap
2.Zero copy
常规的IO
DMA协处理器
Zero copy
由图可知:所谓0拷贝,主要是省去了,从内核缓冲区copy到用户缓冲区和用户缓冲区copy到内核与socket相关的缓冲区这两步,而是直接从内核缓冲区copy到内核与socket相关的缓冲区。总结如下: