1.缓存消峰(一次性解决不完,先放到消息队列当中)
2.解耦(解决多个渠道的数据来源问题)
3.异步 (解决完一个问题,提前返回结果,不用解决完之后一起返回)
1.点对点模式(消费者主动拉取数据,消息收到后清除消息)
2.发布/订阅模式(1.消息队列可以设置多个Topic主题,比如:浏览,点赞,收藏等。2.消费者接受数据后不删除数据。3.消费者相互独立,都可以消费到数据)
1.同步发送(在异步的基础上加上get)
2.异步发送(常用)
3.回调异步发送(返回主题,分区等信息)
1.batch.size 批次大小,默认16k
2.linger.ms 等待时间,默认是0。(可以修改为5~100ms)
3.compression.type 压缩(snappy,gzip)
4.RecordAccumulator 缓冲区大小,默认是32m。(可以修改为64m)
1.默认随机(粘性,不重复分区)
2.根据key的hash值对分区数取%
3.可以设置分区
4.复杂场景可以自定义分区(实现partitioner接口)
1.ack=0 (一般不用)不管leader是否接收到数据,生产者依然继续发送(效率高,但是容易丢失数据)
2.ack=1 (传输普通日志)leader接收到数据应答后,生产者才能继续发送数据(不能确保follower能否接收到数据,可靠性跟安全性一般)
3.ack=-1 (重要数据,金钱相关)leader接收到数据应答,并且ISR((leader+follower的状态)follower跟leader之间默认每30s进行一次通信,判断follower是否挂掉)
至少一次(数据安全,但是可能有重复):ack=-1+分区副本大于等于2+ISR应答的最小副本大于等于2
最多一次(数据不安全,但数据不重复):ack=0
幂等性(确保单分区,单会话内不重复)+事务(解决幂等性出现的Kafka挂掉重启导致PID不一致的问题)
幂等性
1.精准一次=幂等性+至少一次(ack=-1+分区副本大于等于2+ISR应答的最小副本大于等于2)
2.开启事务,必须自定义一个唯一的事务id,即使Kafka挂掉也能继续处理未完成的事物
开启幂等性设置参数小于等于5,因为默认每个broker最多可以缓存5个请求。根据幂等性的SeqNumber单调递增,如果有序的则可以落盘,如果没序则要进入缓存排序,之后再落盘
尚硅谷讲的真的很棒,相关资料资源链接链接:https://pan.baidu.com/s/15nsdIwLJ3vd_h9VAug3kbQ
提取码:wcdx



