kafka 系列 -- 一、基本概念

前言

思考的过程每每比直接获得结论更加剧要架构

kafka 应用场景

  1. 应用监控
  2. 网站用户行为追踪
  3. 流数据
  4. 持久性日志

基本概念

在说基本概念前,先看一下 kafka 的系统架构
image.png网站

  1. Broker
    通常而言,一台机器就是一个 broker,固然 1 台机器上能够部署多个 broker
  2. Producer
    消息的生产者
  3. Consumer
    消息的消费者
  4. Consumer Group
    消费者组,组内能够有多个消费者,共享同一个 groupid。消费组内的消费者,通常状况下为同一个消费者部署多个实例。
  5. Topic
    topic 在 kafka 中是一个逻辑上的概念,用于将 partition 分类。1 个 topic 有多个 partition。生产者将消息发送到指定的 topic 中,消费者从指定的 topic 进行消费。
  6. partition
    一个可追加的日志存储文件。kafka 的分区能够分布在不一样的 broker 上
  7. 多副本机制
    kafka 为 partition 引入了多副本机制,能够经过增长副本数量来提高容灾能力。同一分区中的不一样副本保存相同的消息。副本之间通常是 一主多从。以下图,每一个分区有 3 个副本image.pngspa

    1. AR
      集群中的副本,统称 AR(Assigned Replication),AR = ISR + OSR
    2. ISR
      与 leader 副本保持必定同步的副本,称为 ISR(in-sync-replication)。消息需先发送到 leader 副本,follower 才能从 leader 副本中拉取消息
    3. OSR
      与 leader 副本同步滞后过多的副本,称为 OSR(out-sync-replication)。
    4. leader 副本
      leader 副本负责维护 follower 副本的状态,当 ISR 副本中滞后 leader 副本过多,会被移除到 OSR 副本中。当 OSR 副本跟上了 leader 副本,会被移动到 ISR 副本。只有在 ISR 集合的副本,才有机会选举 leader
    5. HW、LEO
      HW(Hight Watermark)俗称高水位,标识一个特定的偏移量,消费者只能拉取该偏移量以前的消息
      LEO(Low End Offset)日志最后偏移量。标识日志文件中待写入消息的偏移量
    6. 关系图
      图 2: HW、LEO 的关系
      image.png
      图 3 - 图4: leader 副本、follower、HW、LEO 关系
      image.png
      消息写入以后,LEO 变成5,follower,会从 leader 中拉取消息,进行同步
      image.png
      当 ISR 集合的副本都写入 3 后,HW 就会变成 4,表示 0-3 的消息为可消费
      image.png
      当 ISR 集合都写入 3 、4 以后,HW、LEO 值都变成 5
      image.png
    7. 总结
      kafka 消息的写入,是可靠性和可用性的权衡。当 ISR 副本均写入消息时,不用等待 OSR 副本也写入消息。这里避免了 OSR 滞后太多,从而致使不可用性,且消息被写入到多个副本,也保证了消息的可靠性。
      当 leader 写入完消息当即挂掉后,ISR 副本因未能同步到消息,从而致使消息丢失。

与 RocketMQ 区别

  1. partition 在 RocketMQ 中为 队列。消费模型也几乎一致,基于消费组进行消费
  2. RocketMQ 有自带的注册中心,无需 zookeeper。
  3. kafka partition 有多副本机制,RocketMQ 队列没有多副本机制
  4. kafka 多副本机制有丢消息问题,RocketMQ 则没有
  5. 从设计上来看,RocketMQ 与 kafka 的解决的应用场景不同。RocketMQ 注重消息的可靠性,而 kafka 在这一方面比较弱,kafka 更注重系统吞吐量。所以 kafka 不适合要求消息不能丢的场景。
相关文章
相关标签/搜索