kafka概述
一、Kafka概述
1、定义:kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域
2、消息队列:
好处:解耦、可恢复性、缓冲、灵活性&峰值处理、异步通信
两种模式:点对点模式、发布/订阅模式(推、拉)
3、高效读写:分布式;顺序写磁盘;零复制
二、生产者
1、文件存储:log为数据文件,index为索引:offset和偏移量
2、生产者分区策略:
指定partition
未指定partition有key值:按key的hash
都没有情况下:随机后轮询
3、生产者isr:用来选定leader备选组,通过时间判定(replica.lag.time.max)10s
4、生产者ack应答机制(acks):
0:producer不等待broker的ack
1:producer只等待leader成功就返回ack(在未同步follwer成功前leader故障,会丢失数据)
-1(all):producer等待leader和isr中follower成功就返回ack(在同步follwer成功后还未返回ack前,leader故障,会数据重复)
5、生产者数据一致性:
LEO:每个副本的最后一个offset
HW:所有副本中最小的LEO(暴露给消费者的offset)
若leader故障,新leader会同步所有isr的follower,截取到HW
6、ExactlyOnce:用来去重pid、partition、seqnumber(producer重启后pid会改变)。利用幂等性实现(enable.idompotence设置为true)
7、producer事务
引入全局唯一TransactionID,获得PID和TransactionID绑定,当producer重启后,可以通过TransactionID获得原来的PID,来保障幂等性确保ExactlyOnce
三、消费者
1、 消费方式
consumer采用pull(拉)模式从broker中读取数据
不足之处是,kafka没有数据会一直重复拉取,因此在消费数据时会传入一个时间参数timeout,如果没有数据可消费,consumer会等待一段时间之后在返回
2、 消费者分区分配策略
RoundRobin:按组来轮询
Range:按主题平均分配(默认)
消费者的消费者个数发生改变时,分配策略相应改变
3、 offset
由group,tocip,partition确定
4、提交策略
同步、异步提交(丢数据、重复数据)
自定义存储offset
生产者通过ack(-1)保障数据不丢失(但是会重复),幂等性保障数据一次性消费(但是重启后,仍会重复),引入事务绑定pid确保ExactlyOnce
消费者消费数据、修改offset
1、事务(不支持、数据量大问题)
2、至少一次消费 + 幂等性