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、至少一次消费 + 幂等性

posted @ 2021-03-03 10:49  八千步  Views(76)  Comments(0Edit  收藏  举报