Kafka数据消费可靠性分析_java培训

发布时间:2021年04月28日作者:atguigu浏览次数:467

在消息处理系统中,消息传递的可靠性非常重要,消息传递保证语义有以下三个级别:
Atmost once:消息可能会丢失,但不会被重复传递;
Atleast once:消息不会丢失,但是会被重复传递;
Exactly once:保证每条消息被精确传递一次。
Kafka的消息可靠性保障可以从三个方面进行:Brokers配置、生产端配置、消费端配置。
 
 
一、 Brokers配置
Brokers有三个可以影响到Kafka的消息可靠性存储的设置。
1、默认复制因子default.replication.factor,设置更高的复制因子意味着拿更多的空间换可靠性,会牺牲更多的磁盘空间,还会导致在集群活跃节点少于因子数量的时候不能提供服务,不建议进行设置,而建议创建topic时根据数据重要程度指定副本数量。
2、最少同步副本数:min.insync.replicas,默认是1,若保证数据更高可靠性,建议设置为2,在副本数大于等于2个的时候,能避免数据处于只有一个节点活跃的状态,而必须等待有另外一个broker恢复可用时才可以继续进行数据传输。
3、Unclean leader选举,建议将此属性为false,避免非同步副本变为leader,导致数据丢失和不一致。
 
java培训
 
二、 生产者配置
保证使用正确合理的acks配置。
kafka的ack机制(request.requred.acks):
0:producer不等待broker的ack,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据;
1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据;
-1:producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack,数据一般不会丢失,延迟时间长但是可靠性高。
三、 消费端配置
kafka的消费者消费消息可以实现三种语义,都有可能实现,看你消费者的情况,
第一种,at most once,也就是说会存在数据丢失的情况,也就是先保存offset,再处理消息,想实现“至多一次”的做法是:设置消费者自动提交偏移量,并且设置较小的时间间隔。
第二种,at least once,也就是说会重复消费的情况,消费者先处理消息,最后再保存消费进度,做法是:设置消费者自动提交偏移量,但设置很长时间的时间间隔(或者关闭自动提交偏移量),在处理完消息后,手动调用同步模式的提交偏移量方法,consumer.commitSync
第三种,exactly once,要想实现需要将消费者的消费进度和处理结果保存在同一介质中,再将这两个操作封装进一个原子性操作。
 
想要了解跟多关于java培训课程内容欢迎关注尚硅谷java培训,尚硅谷除了这些技术文章外还有免费的高质量java培训课程视频供广大学员下载学习。

上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦3层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)