Kafka系列(七):Kafka设计原理

Kafka设计原理

      • 副本与ISR设计
      • 水印和leader epoch
      • controller的职责

副本与ISR设计

一个kafak分区本质上就是一个备份日志,即利用多份相同的备份共同提供冗余机制来保持系统的高可用性,这些备份在kafka中被称为副本。kafka把所有分区的副本均匀地分配到broker上,并能从这些副本中挑选一个副本作为一个leader副本对外提供服务,而其他的副本被称为follower副本,只能被动地向leader副本请求数据,从而保持与leader副本的同步。

假如leader副本永远都能正常的工作,那么其实follower副本是不需要的。但是现实情况中,leader可能因为各种原因而导致宕机。一旦发生这种情况,follower副本就会竞相争夺称为leader的权利。但是不是所有的follower副本都能有这个权利,因为有些follower包含的数据远少于之前宕机的leader,下面我们介绍一下ISR。

ISR,就是kafka集群动态维护的一组相同副本的集合。每个topic分区都有自己的ISR列表,ISR中的所有副本都与leader保持同步的状态。值得注意的是,leader副本总是包含在ISR中的,只有ISR中的副本才有资格成为leader。而producer写入的一条kafka消息只有被ISR中所有副本都能接收到,才被视为已提交的状态(ack=-1|all)。

水印和leader epoch

水印通常被使用在流式处理领域,来表示事件在时间点上的进度。在kafka中,水印的概念与时间无关,而是与位置有关。严格来说他表示的是一个位置信息,即位移。

kafka分区下一般存在多个副本用于实现数据冗余,进一步实现高可用性。每个kafak副本对象都有两个重要的属性:日志末端位移(LEO)和高水印(HW)。

  • LEO:日志末端位移,记录了该副本对象底层日志文件上下一条消息的位移值。如果LEO=10,那么表示该副本日志上已经保存了10条信息,位移值是[0,9]。
  • HW:任何一个副本对象的HW值一定不大于其LEO值,而小于或等于HW值的所有消息被认为是已提交的。

具体看参考这篇博客https://www.cnblogs.com/objcoding/p/12106282.html

controller的职责

  • 更新集群元数据信息。
  • 创建topic。
  • 删除topic。
  • 分区重分配。
  • preferred leader副本选举。
  • topic分区扩展。
  • broker加入集群。
  • broker奔溃。
  • 受控关闭。
  • controller leader选举。

你可能感兴趣的:(kafka,kafka,java,分布式)