14-kafka丢不丢数据

题目:kafka丢不丢数据


答案:

1.producer角度
(1)ack=0,相当于异步发送,消息发送完毕即offset增加,继续生产
(2)ack=1,leader收到leader replica对一个消息的接受,ack才增加offset,然后继续生产。
(3)ack=-1,leader收到所有replica对一个消息的接收,ack才增加offset,然后继续生产。
ack在生产者指定,不同生产者可以不同。
ack设为-1,需要ISR里的所有Follower应答,想要真正不丢数据,需要配合参数。

  • min.insync.replicas: ack为-1时生效,ISR里应答的最小follower数量。
    默认为1(leader本身也算一个!),所以当ISR里除了leader本身,没有其他的follower,即使ack设为-1,相当于1的效果,不能保证不丢数据。
    需要将min.insync.replicas设置大于等于2,才能保证有其他副本同步到数据。
  • retries = Integer.MAX_VALUE,无限重试。如果上述两个条件不满足,写入一直失败,就会无限次重试,保证数据必须成功的发送给两个副本,如果做不到,就不停的重试,除非是面向金融级的场景,面向企业大客户,或者是广告计费,跟钱的计算相关的场景下,才会通过严格配置保证数据绝对不丢失。
    在这里插入图片描述
    完全不丢结论:ack=-1 + min.insync.replicas>=2 +无限重试

2.broker角度
副本数大于1
min.insync.replicas大于1

3.consumer角度
手动提交offset,flink结合checkpoint


你可能感兴趣的:(kafka面经复习,kafka,分布式,zookeeper)