极简单系列-kafka 生产的可靠性

在这里插入图片描述
(1)指明 partition 的情况 直接按指定的
(2)没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
(3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后 面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。


在这里插入图片描述
– 需要有个 ack机制 进行(acknowledgement确认收到), 如果一定时间没有收到 就重新发送。

在这里插入图片描述

–这个返回值什么时候发送?


也就是我这个问题

在这里插入图片描述

我这有几个选项 大家要不来选一下 分析一下这几种情况
A 发过去就完事了, 这样吞吐率最高。但是万一没成功 消息就丢了
B leader 收到之后 ,follower还没来得及同步数据 。Leader 就挂掉了-》数据就丢了
C 半数以上。也就是这一半的机器没都挂掉,就还有数据。容灾能容这一半(实际上kafka没有这个选项)
D 全部follower 同步之后 ,好处是 只要有一台机器没挂,消息就不会丢。但是缺点是如果有一台机器故障 一直没有收到呢?


实际上kafka 有一个机制,是维护一个 有效的在同步中的follower 列表

在这里插入图片描述
ISR:In-sync-replicas, 由 kafka的leader 维护这部分处于同步的副本集和,如果在replica.lag.time.max.ms时间内系统没有发送fetch请求,或者已经在发送请求,但是在该限定时间内没有赶上Leader的数据就被剔除ISR列表。 在Kafka-0.9.0版本剔除replica.lag.max.messages消息个数限定,因为这个会导致其他的Broker节点频繁的加入和退出ISR。


在这里插入图片描述


回到问题本身

在这里插入图片描述
引申出两个点:
在这里插入图片描述
如果生产者在规定的时间内,并没有得到Kafka的Leader的Ack应答,Kafka可以开启reties机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值