概念回顾:

AR 所有副本,ISR 保持与 leader 同步状态的副本。

LEO 表示每个分区最后一条消息下一个位置,HW在 ISR 中保持同步的最小 LEO,HW 叫高水位。

副本

LEO 和 HW 的更新,follower 拉取 leader 数据时,会发送自己的 LEO。leader 接收到取最小的作为 leader 自己的 HW。leader 返回响应给 follower 时会带上 HW,follower 接收到响应时更新 HW。

kafka 的 leader 是读写都干的,为什么不用读写分离呀?

作者说读写分离有两个问题:数据一致性(同一时刻,主从节点数据不一致),时延问题(从节点拉取数据需要时间)。

作者说,对于哪种写多读少的,读写分离的作用就非常有限了。不能做到负载均衡。

但是 在一个节点上读写就没这种问题。其中一个主题有多个分区,如果想增加并发量,多搞几个分区就行了。

总之吧,主读主写在 kafka 这里非常好。😒

可能对于 kafka 来说,消息算是写多读少吧。消费者就消费一次,不会跟数据库一样,一个数据可能随时会被查询多次。

日志同步,当 leader 挂掉了,那就选择副本中跟 leader 同步最多的。作者说的少数服从多数不知道什么意思。

可靠性:副本数多些自然就更可靠。ack。消费者手动提交等。这些可以提高可靠性。