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

发布于:2022-12-29 ⋅ 阅读:(269) ⋅ 点赞:(0)

在消息处理系统中,消息传递的可靠性非常重要,消息传递保证语义有以下三个级别:

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,导致数据丢失和不一致。

二、 生产者配置

保证使用正确合理的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,要想实现需要将消费者的消费进度和处理结果保存在同一介质中,再将这两个操作封装进一个原子性操作。 


网站公告

今日签到

点亮在社区的每一天
去签到