Kafka合集(三):Kafka相关概念

概述


定义

分布式 发布/订阅 主动拉取模式消息队列(Message Queue)

源码语言

Scala

应用场景

大数据实时处理 – 常见spark + kafka / flunm + kafka

作用

  • 消息传递
  • 存储
  • 流处理

关键术语

Producer

  • 概念
    • 生产者 – 发布消息的服务

Kafka Cluster

  • 概念
    • kafka集群 – 没啥说的

Broker

  • 概念
    • 集群的一个节点 – 一个Cluster里有多个Broker

Topic

  • 概念

    • 主题 – 对消息进行分类 一个Cluster的全量消息可分为多个Topic
  • 作用

    • 如果没有Topic对消息进行分类 每个消费者只能接收全量的消息 ; 分类后 可订阅自己需要的消息类别

Partition

  • 概念

    • Topic的分区 – 一个topic可分布在多个Broker上 每个Broker上存放这部分topic的物理单位是Partition
  • 作用

    • 一个topic有多个Partition Partition数量不受节点数限制 消息来了 可使一个topic负载均衡 ;
    • 更小数据单位 查询速度更快 ;
    • 一个Producer/Customer 能连多个Broker中的Partition 提高生产消费并发
  • 存储分布 :

    • 每个partition为一个文件目录 存储在kafka目录/logs/下 1个topic的3个partiton目录命名为 topic名称0 topic名称1 topic名称2 (0 1 2 代表分区)
    • 特别的 高版本的kafka的offset数据存储在kafka的特定topic"__consumer_offsets"中 默认50个分区 在kafka目录/logs/下能找到分区文件 __consumer_offsets-1 __consumer_offsets-2 … __consumer_offsets-50
  • 有序 : Partition内部数据是有序的 每个partition只需要支持顺序读写 方便快速寻址

Replica

  • 概念

    Partition的副本 – 没啥说的

Leader

  • 概念

    Partition的备份的主 – 每个Partition可做数据备份 主备在不同broker上 备份数量自定义

  • 作用

    高可靠 Leader活着只找Leader Leader死了选举一个Follower作为Leader

Customer Group(CG)

  • 概念

    消费者组 – 一个消费单位 独立而整体 提高消费并发

  • 作用

    • 独立在于 组与组互不干扰 ;

    • 整体在于 一个Customer Group的目标是 消费某个(当然可以多个)topic 对于一个topic Group要派不同的Customer去消费这个topic的不同的分区

      (分工明确 节省时间 干的快 提高并发 提高消费能力)
      一个Partition 每个订阅了它的Customer Group中只有一个Customer能来消费

      所以 最高效的配置是 当一个Customer Group订阅了一个Topic 这个Group的Customer数=这个Topic的Partition数 --> 具体应用???

      (如果Partition数多于Customer数 消费的时间会久 会慢 ; 如果Customer数多于Partition数 启动服务后 多余的Customer在空跑 浪费资源还不干活)

Segment

  • 概念

    • 消息的实际存储 – partition是一个文件夹 消息实际存储在多个segment数据文件中
  • 消息量不等 : 每个segment file中的消息数量不一定相等 可方便old segment file快速被删除

  • segment file命名规则 : partition的全局第一个segment从0开始 下一个segment file名为上一个segment file最后一条消息的offset值(数值最大为64位long大小 19位数字字符长度 没有数字用0填充)

  • segment file的组成 : segment索引文件xx.index(存储大量元数据:消息的offset) + segment数据文件xxx.log(存储大量消息) 一一对应 成对出现

Offset

  • 概念

    • 消息的***/ID 在一个partition中唯一标识一条消息

Customer

  • 概念

    • 消费者 – 消费消息的服务 一个Customer Group由多个Customer组成

Zookeeper

  • 概念

    • 资源调度器 – kafka0.9版本之前 存储kafka集群信息 存储消费数据位置信息(偏移量offset)
  • 作用

    • 存储kafka集群的什么信息 ???
    • 存储消费数据位置信息(偏移量offset) : 消费者服务器内存 和 zookeeper中都存一份消费偏移量信息 . 平时用从内存中取offset 速度快 ; 如果服务器跪了 等起来之后从zookeeper中取offset 可以继续消费 不必从头开始重新消费

    0.9版本及之后 offset存储在kafka集群中 由系统创建的一个topic里

    (zookeeper主要起到一个润滑剂作用 消费者服务器挂了 就要去总请求zookeeper 拿offset 耦合度太高了 也慢)


2.架构图

Kafka合集(三):Kafka相关概念