概述
kafka是一种发布-订阅者模式的主动拉取型消息队列。
- Broker:kafka集群中的单个机器
- Topic:kafka消息的存储单元
- Partition:一个topic在不同broker的展现形式,以实现负载均衡,提高并发度
- Leader/Follower:主从分布,对于一个topic来说,一台机器上有本机器的Leader数据和其他机器的Partition,当Leader宕机时,Partition才会被拉起为Leader并提供调用。
- Consumer group:消费者组:一个分区只能被一个消费者组的某一个消费者消费
消费进度
消费进度在kafka0.9前存储在zookeeper中,0.9之后存储在kafka的系统topic中。
kafka读写速度快
写入快
cache写入
kafka收到数据不会直接写到硬盘中,而回写入操作系统的高速缓存cache。再有cache批量写入硬盘。
顺序写入
kafka会将数据直接顺序写入文件尾部,不随机读写。
读的快
零拷贝技术
正常程序读取文件给外部:
服务 - cache - 硬盘 - cache - 服务 - socket - 网卡
kafka
服务 - cache - 硬盘 -cache -网卡
去掉了拷贝到服务和拷贝到socket的过程,实现零拷贝。
数据一致性
不丢失
生产端
ack应答机制,当所有数据被推送到kafka且成功备份后会返回ack应答。
服务端
从节点备份,保证至少有一个从节点,防止主节点故障导致数据挂掉。
消费端
关闭自动提交,将offset位移控制权交由客户端空值,每个客户端处理后提交offset进行位移。
不重复
客户端建立去重表进行支持