Kafka重要概念

369 阅读3分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

Kafka的大概架构图如下:

image.png

主要角色

  • Producer:消息的生产者,可以有多个
  • Consumer:消息的消费者,可以有多个
  • Broker:存储kafka的机器节点,可以有多个

Topic & Partition

所有的消息订阅,都需要指定一个主题。一个主题可以对应多个分区,但是一个分区只能单属于一个主题

一个分区可以看成是一个append-only的日志文件。 分区分布在多个broker上以追求高性能。

每个分区都有一个offset标记位,来保证分区内的顺序性。因此每个分区内是有序的,但是分区和分区间是无法保证顺序的。(即:Kafka 保证的是分区有序而不是主题有序)

topic创建完了,可以继续修改分区数量,来实现数据的水平扩展。如果一个主题只对应一个文件,那么这个文件所在的机器 I/O 将会成为这个主题的性能瓶颈,而分区解决了这个问题。(分区提高了吞吐)

副本

为了提升容灾,为分区添加了副本机制。在同一时刻,不能保证副本之间完全同步。副本是:一主多从结构,leader负责处理读写请求,follower只负责和leader做数据同步。副本一定处于不同的broker中,leader出现了问题,follower会选举新leader来实现故障的转移。

副本同步的一些概念:

  • ISR

    • 和leader 保持一定同步的副本集合(in-sync-replicas)
  • OSR

    • 和leader 落后太多的副本结合 (out-of-sync-replica)
  • HW

    • High Watermark 高水位。只有HW之前的数据才可以被消费,后面的这段窗口不可以被消费。
  • LEO

    • Log End Offset:代表当前分区的log文件中,待写入的offset,这是针对每个分区的。每个分区和副本都维护一个LEO,LEO等于当前日志文件最后一条的offset+1。

当 follower 副本落后 太多或失效时, leader 副本会把它从 ISR 集合中剔除,如果 OSR 集合中有 follower 副本追上了 leader 副本,那么 leader 副本会把它从 OSR 集合转移至 ISR 集合 。一般意义上:leader失效的时候,只有ISR的副本可以选为leader,OSR的没有任何机会。

image.png

HW的原理类似于木桶理论,最高的水位取决于这些分区副本桶中最短的那块木板。 HW就是最短的那个高度。

image.png

Kafka的复制机制既不是完全的同步复制, 也不是单纯的异步复制。

  • 同步复制: 所有副本都收到消息,才认为该消息成功提交,但是十分的影响性能
  • 异步复制:只要被 leader 副本写入就被认为已经成功提交

kafka都不能简单算这2种中的一种。而是采用ISR 的方式则有效地权衡了数据可靠性和性能之间的关系。kafka为了追求高性能通过异步写入,副本主动拉取变更,但不保证强一致。但维持公共状态的HW位置,保证消息可靠。