Kafka如何保证数据不丢失

生产者端:

1)  消息生产分为同步模式和异步模式

2)  消息确认分为三个状态    

        a) 0:生产者只负责发送数据    

        b) 1:某个partition的leader收到数据给出响应    

        c) -1:某个partition的所有副本都收到数据后给出响应

3)  在同步模式下    

        a) 生产者等待10S,如果broker没有给出ack响应,就认为失败。    

        b) 生产者重试3次,如果还没有响应,就报错。

4)  在异步模式下    

        a) 先将数据保存在生产者端的buffer中。Buffer大小是2万条。 32M    

        b) 满足数据阈值或者时间阈值其中的一个条件就可以发送数据。    

        c) 发送一批数据的大小是500条。16Kb 如果broker迟迟不给ack,而buffer又满了。开发者可以设置是否直接清空buffer中的数据。

broker端:

保证方案: 磁盘存储 + 多副本 + ack为-1

broker端的消息不丢失,其实就是用partition副本机制来保证。 Producer ack -1(all). 能够保证所有的副本都同步好了数据。其中一台机器挂了,并不影响数据的完整性。     

消费者端:

        通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。  

        而offset的信息在kafka0.8版本之前保存在zookeeper中,在0.8版本之后保存到topic中,即使消费者在运行过程中挂掉了,再次启动的时候会找到offset的值,找到之前消费消息的位置,接着消费,由于offset的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值