Kafka消息丢失

Kafka消息丢失

Kafka服务端

Kafka只对已提交消息做有限度持久化保证

  1. 已提交消息,收到消息并成功写入Broker,该消息为已提交消息。若ack设置为-1则成功写入broker的意思是leader节点+副本节点都需要写入成功,kafka默认只用leader节点写入成功即可
  2. 有限度持久化,即当kafka集群出现故障时,起码有一台broker是活着的。

Kafka生产者消息丢失

使用了producer.send(msg),这个方法是异步的,不保证消息发送成功,因此应该使用producer.send(msg,callback)函数,能保证消息发送成功,若失败了还能调用callback进行处理。

Kafka消费者消息丢失

  1. 先更新了位移,在消费,此时位移更新了,消费失败,则会出现消息丢失。当然先消费,在更新位移,也可能出现重复消费的问题,这个需要保证幂等性。
  2. 批量获取多条消息,开启多线程去消费,然后自动更新了位移,此时若有一个线程消费失败,但位移已经改变,也会出现消息丢失的场景。

总结

  1. 不要使用异步发送消息,而需要使用带有回调通知的send方法。
  2. 设置acks=-1,保证所有follower都持久化好消息,在返回成功。
  3. 设置retires为一个较大的值,当出现消息发送失败的情况,进行重试发送消息。
  4. 设置unclean.leader.election,enable=false如果某一个follower落后leader很多,则不让该follower竞选
  5. replication.factor>=3设置副本数,多冗余消息,防止消息丢失
  6. min.insync.replicas>1。控制消息至少要被写入多少个副本才算已提交
  7. replication.factor>min.insync.replicas。提高可用性。推荐设置replication.factor=min.insync.replicas+1
  8. 不设置自动提交,enable.auto.commit=false,而采用手动提交位移的方式,改变位移
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值