kafka怎样保证消息的不丢失

kafka怎样保证消息的不丢失

三个方面考虑与实现

一,从producer端入手
确保消息能够到达到broker端,并且实现消息的存储。有三种方式保证消息的存储:1、生产者默认是使用异步发送消息的,我们可以把异步发送改成同步发送,这样生产者就可以实时的发送消息。2、添加异步回调的函数来监听消息的发送状态,如果发送时报错这就再次调用发送的方法,重新发送。3,生产者本身是提供了回调参数retries的,如果发送失败,则生产者会重新再次的发行消息。

二,从broker端入手
只需要我们将消息持久化到磁盘就可确保消息不丢失,但是kafka为了性能,采用了异步批量刷新磁盘实现存储功能的机制,就会按照一定的消息量以及时间间隔去刷盘存储消息,最终刷新磁盘的任务是由操作系统来调度的,如果在刷盘之前系统奔溃那么消息就会丢失,并没有提供同步刷盘的同步机制,针对这个问题,需要从partition的副本同步机制以及acks机制来解决,副本机制是针对每一个数据分区的高可用策略,每个副本集包含一个leader以及多个副本,leader主要是负责事务类型的请求,而follower是负责同步我们leader上面的数据的,在这个基础上kafka提供了一个acks的参数,在创建broker的时候可以去设置他。acks参数选择如下 0: 表示生产者不需要等待broker的响应就可以认定消息是发送成功了的,这种情况就会出现消息丢失的情况,1:表示leader不需要leader收到消息之后就认定消息是发送成功了的,不需要等待副本的同步,这种情况么当leader挂了消息同样会丢失。 -1:标识leader收到消息并且所有副本都已经同步数据之后再认定消息发送成功。这样就可以保证数据的可靠性。

三,消费端
一般不会出现消息丢失的情况,即使丢失,可以调offset来实现消息的重新消费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值