深入浅出 Kafka(四)Kafka 简介


Kafka 特性:

  • 具有近乎实时的消息处理能力 顺序读写磁盘
  • 支持批量读写磁盘 并且会对消息进行批量压缩
  • 支持消息分区 可以在线增加分区,为每个分区创建多个副本,只会有一个 Leader 负责读写,其他副本与 Leader 同步。
  • 支持水平扩展

Kafka 核心概念:

  • 消息 Kafka 中最基本的数据单元,由一串字节构成。主要由 key、value 构成,key 主要是根据一定策略将消息路由到指定分区中。
  • Topic Topic 是用于存储消息的逻辑概念。每个 Topic 可以有多个 produer 向其推送消息,也可以有多个 consumer 去消费消息。每个 Topic 可以划分成多个 partition,同一个 Topic 下不同 partition 包涵的信息是不同的。每个消息被添加到 partition 的时候,都会被分配一个 offset,它是消息在这个 partition 中的唯一编号。Kafka 通过 offset 保证每个 partition 内消息的顺序性,但同一个 Topic 在多个 partition 内是无法保证消息的顺序性的。
  • Log partition 在逻辑上对应一个 Log,Log 由多个 segment 组成,每个 segment对应一个日志文件和一个索引文件。日志文件大小是有限制的,当超过一定限制的时候会自动切割。索引文件采用稀疏索引的方式,在运行时会将其内容映射到内存,提高索引速度。
  • Retention Policy Kafka 有两种保留策略。一种是根据消息时间保留,一种是基于日志文件大小。既可以针对全局配置,也可以针对 Topic 配置。
  • Log Compaction Kafka 采用了端到端的压缩,客户端的消息可以一起被压缩后送到服务端,并以压缩后的格式写入日志文件,以压缩的格式发送到 consumer,消息从 producer 发出到 consumer 拿到都被是压缩的,只有在 consumer 使用的时候才被解压缩,所以做"端到端的压缩"。Kafka 支持 gzip、snappy、lz4 压缩协议。
  • Broker 一个单独的 kafka server 就是一个 Broker。接收生产者发过来的请求,分配 offset。brokerid 不发生变化 消费者就不会有问题。
  • replication 每个 partition 都可以有多个 replication。每个 replication 包涵的信息是一样的。每个 partition 至少有一个 replication,当只有一个 replication 的时候,就只有 Leader replication,没有 Follower replication。
  • ISR(In-Sync Replica) 表示目前可用的(alive)且消息量与 Leader 相差不多的 replication 集合,是整个副本集合一个子集。在 ISR 中的 replication 必须满足两个条件(1.replication所在节点必须维持与 zookeeper 的连接。2.replication 的最后一条消息的 offset 与 Leader replication 最后一条消息的 offset 之间差值不超出指定的阈值。)每个 partition 的 Leader replication 都会维护该 partition 的 ISR 集合。写请求先由 Leader replication 处理,Follower replication 仅仅是把 Leader replication 的数据拉取到本地之后,同步更新到自己的 Log,这期间有一定的延迟,导致 Follower replication 的副本略少于 Leader replication,只要不超过阈值都是可以接受的。当一个 Follower replication 因为宕机等原因导致长时间没有拉取消息同步,就会被 Leader 踢出 ISR 集合。当时 Follower replication 从异常中恢复后,会继续与 Leader replication 进行同步,当 offset 差值小于阈值的时候,Follower replication 会被重新加入 ISR。
  • HW(Hight Watermark)HW 标记了一个特殊的 offset,consumer 只能拉取到 HW 之前的消息,HW 之后的消息对 consumer 来说是不可见的。当 ISR 集合中全部 Follower replication 都将 HW 之前的消息拉去同步后,Leader replication 会更新 HW 的值。HW 之前的消息成为"commit",这时候消息是在多个 replication 都存在的,即使有 replication 损坏也不会导致数据丢失。
  • LEO(Log End Offset)所有的 replication 都会有一个 offset 标记,它指向了当前副本最后一条消息的 offset。当 producer 向 Broker 推送消息的时候,Leader replication 的 LEO 会增加,当 Follower replication 成功从 Leader replication 拉取消息并且同步到 Log 后,Follower replication 的 LEO 会增加。
  • Cluster 多个 Broker 组成一个 Cluster 对外提供服务。每个 Cluster 会选举出一个 Broker 来担任 Controller,Controller 负责管理整个集群的 partition 状态、每个 partition 的 replication 状态、监听 Zookeeper 的数据变化等等。
  • producer 生产消息,并将消息推送到 Topic 的 partition 中。
  • consumer & consumer group 从 Topic 中拉取信息,并对其进行消费。多个 consumer 可以组成 consumer group。
分享:

评论