第四天kafka知识
Producer基础的案例
1 Producer的小案例
电商系统,会员,凡是能登录的人都是会员。
你消费了多少钱,那么就给给你累计多少积分。
比如,你消费了1000块钱,那么同时给你找个会员号1000积分
1.1 在kafka里面,我们发送消息的时候,可以给消息指定key,也可以不指定
key跟我们要把找个消息发送到这个主题的哪个分区有关系
1.1.1 不指定key
发送的一条消息,会以轮询的方式 发送到分区里面 (要么轮询,要么随机)
hadoop p0
flink p1
hbase p0
hadoop p0
1.1.2 如果指定key ,test
test 取这个key的hash值 数字 3
数字/分区数
3/2
比如我们分区数2,结果要么是0,要么是1
test hadoop -> p1
这样子的话,我们可以保证这样的一个事,key相同的消息
一定会被发送到同一个分区
2 consumer的原理
2.1 offset
在kafka里面,kafka是不帮我们维护这个offset的,这个偏移量需要consumer自己去维护
consumer这儿,kafka提供了两个参数
是否开启自动提交偏移量
每隔多久提交一次消费的offset
enable.auto.commit true
auto.commit.interval 1000
2.2 偏移量的数据存到哪呢?
2.2.1 kafka 0.8版本的时候,消费者偏移量的数据是存储到zookeeper里面
高并发,zookeeper会出问题
2.2.2 kafka0.8之后,offset存储到了kafka内部的一个主题里面,__consumer_offset
这个kafka内部的主题,默认是50个分区
默认只有一个副本
把压力分散到各个broker节点上
2.3 Coordinator 启动进行了负载均衡
根据group ID(消费者组),计算出来一个hash值,计算出来以后就是一个数据,然后用这个对 _consumer_offset的分区数(50)
取模,比如:2,就到集群里面去看 partition为2的这个分区的leader partition在哪一台服务器上面,那么那一台
服务器就是coordinator服务器
1 所有的消费者,都会发送join group 的一个请求;consumer group 向coordinator进行注册
2 coordinator服务器会从这个消费组的所有消费者选一个leader consumer,同时这个coordinator服务器也会
把你要消费topic的消息发送给leader consumer(谁先注册到coordinator,谁就是leader consumer)
3 leader consumer 制定分区的消费方案,发送sync group 请求,然后把分区消费方案发送给coordinator
4 coordinator 然后下发消费方案,给每个consumer
5 一旦有一个consumer挂掉,会重新走一遍上面流程,重新执行
2.4 Coordinator 负载均衡策略(了解)
1 range策略 默认
2 round-robin策略
3 sticky策略
24-4 深入浅出kafka4 02:15:00分
==============================================================================================================
3 下一个简单的consumer的基础API
4 consumer的核心参数
5 Consumer小案例
回头再去看第一天的课程里面,有几个地方没讲。(听起来会有点绕)
1 稀松索引
2 ISR机制
3 HW,LEO的更新流程
如果讲完以后当时如果似懂非懂也没事,下去以后再看一下视频,就明白了。
补充:
重试乱序:消息重试是肯能导致消息的乱序的,因为可能排在你后面的消息都发送出去了,你现在收到回调失败了才重试,此时消息
会乱系,所以使用max.in.flight.requests.per.connection 参数设置为1 ,这样可以保证producer同一时间只能发送一条消息
这个知识点先不讲,后面讲kafaka的解决方案的时候讲。