kafka进阶(二)

文章目录


前言

本篇主要介绍kafka 的 Ack机制 和 ISR集合

一、Ack机制

Kafka提供了三种不同的应答机制(ACK):
acks=0 :这是最不可靠的模式。在这种模式下,生产者不会等待来自服务器的确认,这意味着消息可能会在发送之后丢失,而生产者将无法知道它是否成功到达服务器。
acks=1 :这是默认模式,也是一种折衷方式。在这种模式下,生产者会在消息发送后等待来自分区领导者的确认,但不会等待所有副本的确认。这意味着只要消息被写入分区领导者,生产者就会收到确认。如果分区领导者成功写入消息,但在同步到所有副本之前宕机,消息可能会丢失。
acks=all:这是最可靠的模式。在这种模式下,生产者会在消息发送后等待所有副本的确认。只有在所有副本都成功写入消息后,生产者才会收到确认。这确保了消息的可靠性,但会导致更长的延迟。

二、ISR集合

ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。一条 Kafka 消息,只有被 ISR 中的副本都接收到,才被视为"已同步"状态。这跟 zk 的同步机制不一样,zk 只需要超过半数节点写入,就可被视为已写入成功。

如果一个follower因为某种故障迟迟无法与leader 同步,那么如果选择 ack 为 all 的话,leader 要一直等待follower 同步完才发 ack 吗

显然不是,in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。

被踢出 ISR 的 follower 在选举新的 leader 时不被考虑,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

同样的 leader 故障的话,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。

LEO:指的是每个副本最大的offset;

HW:指的是消费者能见到的最大的offset,ISR队列中最小的LEO。


总结

千里之行,始于足下!

相关推荐
每天一道题2 小时前
Kafka 是如何工作的?从 Broker、Partition、Offset 到 Consumer Group
分布式·kafka
用户1494484813204 小时前
为什么大厂很少直接用 2PC/TCC?聊聊分布式事务在真实业务里的落地套路
分布式·后端
code_slave(码畜)5 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
德迅云安全-上官6 小时前
新一代智能分布式云接入:应用加速守护 TCP 业务安全与体验
分布式·tcp/ip·安全
凯凯姜6 小时前
分布式定时任务重复执行与故障恢复
分布式
ClouGence7 小时前
还在用命令行管理 Kafka?开源 CloudDM 让操作更简单
数据库·kafka·开源
Sayai8 小时前
Kafka 磁盘空间治理实战:retention 保留策略、log.dirs 在线扩容、分区跨盘迁移与不停机整体换盘
大数据·运维·分布式·kafka·消息队列
爱吃牛肉的大老虎8 小时前
Redis之分布式 Session问题
数据库·redis·分布式
阿标在干嘛9 小时前
分布式锁的“场景适配“:我们为什么在部分链路中选择了数据库乐观锁?
数据库·分布式
孤狼GPT9 小时前
ChatGPT、Codex排查实录:Kafka消费者日志明明显示处理成功,为什么同一条消息还是被重复消费?
kafka·springboot·codex·chatgptplus·chatgptpro