kafka读书笔记1——概念

  • 消息
    • 消息是Kafka中最基本的数据单元
    • 消息由key和value构成,它们都是byte数组
      • key:包含同一key的消息会全部写入同一分区中,key可以是null
      • value:value是消息的真正有效负载的数据
  • Topic & partition & Log
    • Topic:每个Topic至少一个partition,每个partition对应一个offset
      • offet只保证在同一partition内是有序的
    • partition
      • 分区是kafka水平扩展的基础,增加partition可以增加其并行处理能力
      • 每个partition在物理上对应一个文件夹
    • Log
      • 分区在逻辑上对应一个Log,Log对应到磁盘上的一个文件夹
      • Log由多个Segment组成,每个Segment对应一个日志文件和索引文件
  • 保留策略(Retention Policy)& 日志压缩(Log Compaction)
    • 保留策略:无论Consumer是否消费了消息,Kafka都会根据保留策略保存这些消息,共两种
      • 根据消息保留的时间:当消息在Kafka中保存的时间超过指定时间,则删除
      • 根据Topic存储的数据大小:当日志文件大于一个阈值,开始删除最旧的消息
      • Kafka会启动一个后台线程,定期检查
    • 日志压缩:有时候用户只关心key最新的value值
      • 开启日志压缩后,kafka会开启后台线程,定期将相同的key的消息进行合并,只保留最新的value值
  • Broker
    • 一个单独的Kafka Server就是一个Broker
    • Broker的任务
      • 接受Producer的消息,分配offset,保存到磁盘中
      • 接受Consumer和其他Broker的请求,返回响应
    • 在一般的生产环境中,一个Broker独占一台物理服务器
  • Replica 副本
    • 每个partition可以有多个副本,副本满足最终一致性(但不保证同一时刻完全一样)
    • 同一partition的多个副本会被分配到不同Broker上,这样,某一Broker宕机后,可以继续对外提供服务
    • 每个分区最少一个副本,当只有一个副本时,只有Leader副本,没有Follower副本
      • Leader:负责所有的读写请求
      • Follower:从Leader拉取数据到本地,同步更新到Log中
  • ISR(In-Sync Replica)集合
    • ISR表示: 目前可用(alive)且消息量与Leader相差不多的副本集合
      • 可用:副本所在的节点维持着与Zookeeper的连接
      • 相差不多:Leader与Follower的offset差值不能超过指定的阈值
    • Follower的offset肯定会比Leader的存在延迟,只要未超过阈值就是可以容忍的
    • 如果不满足这两个条件,该Follower副本就会被踢出ISR集合。重新同步的过程中,满足条件再加入到ISR中
  • HW & LEO
    • HW(HighWatermark)
      • HW表示所有副本完成同步的offset,HW之前的消息都称为commit
      • HW由Leader副本管理,只有Leader有
      • 当消费者处理消息的时候,只能拉取HW之前的消息。
    • LEO(Log End Offset)
      • 每个副本都会有的一个offset标记,它指向追加到当前副本的最后一个消息的offset
  • 同步和异步
    • 通过request.required.acks来设置。这种机制确保了只要“in sync” list有一个或以上的flollower,一条被commit的消息就不会丢失。
    • 同步复制
      • 要求“活着的”follower都复制完,这条消息才会被认为commit
      • 影响吞吐率
    • 异步复制
      • follower异步的从leader复制数据,数据只要被leader写入log就被认为已经commit
      • 如果leader宕机,则会丢失数据
  • Cluster & Controller
    • Cluster:多个Broker组成的集群
      • 包含一个Broker担任Controller,其他Broker听从Controller指挥
    • Controller
      • 负责管理分区状态
      • 管理各个Replica
      • 监听Zookeeper
  • Producer & Consumer
    • Producer 生产者
      • 生产消息,按照指定规则推送到Topic的partition中
        • partition选取的规则有:key的hash值分区 或者 轮询
    • Consumer 消费者
      • 从指定Topic拉取信息并消费
      • 每个Consumer自己维护offset
  • Consumer Group
    • 多个Consumer组成Consumer Group,一个Consumer只能属于一个Consumer Group
    • 保证一个Group订阅的Topic的每个分区只被分配给此Consumer Group中的一个消费者处理
    • 广播和独播
      • 广播:每个Consumer单独一个Group,一个消息可以被多个Consumer同时消费
      • 独播:所有Consumer放在一个Group,一个消息只被一个Consumer消费
    • Rebalance
      • 用于水平扩展和故障迁移
        • 水平扩展:当某一Consumer处理能力不足时,可以向Group添加Consumer,触发Rebalance
        • 故障迁移:当某一Consumer宕机,触发Rebalance
    • Group中的Consumer数量
      • 当Consumer超过partition数量,会导致Group中有Consumer分配不到partition造成浪费

猜你喜欢

转载自blog.csdn.net/qq_41157876/article/details/112799957
今日推荐