什么是Kafka

Kafka是由Linkedin公司开发,是一个分布式、支持分区(Partition)、多副本(replica),基于zookeeper协调的分布式消息系统。目前Kafka被定位为一个分布式流式处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。

架构

一个典型的Kafka体系架构包括 若干Producer、若干Broker、若干Consumer、以及一个ZooKeeper集群。其中ZooKeeper是Kafka用来收集元数据的管理、控制器的选举等操作。Producer将消息发送到Broker,Broker则负责将收到的消息存储在磁盘当中,与此同时,Consumer负责从Broker订阅并消费消息。

image.png

名词解释

  1. Producer:生产者,发布消息的对象。生产者负责创建消息,然后将其投送到Kafka中。
  2. Consumer:消费者,订阅消息并处理发布消息的对象
  3. Broker:服务器代理节点。对于Kafka来说,Broker可以简单视为一个独立的Kafka服务节点或Kafka服务实例。前提是一台服务器只部署了一个Kafka实例。一个或多个Broker组成一个集群。一般采用broker表示服务代理节点。
  4. Topic:消息主题,是一个逻辑上的概念,由若干个分区组成。
  5. Partition:分区,每一个分区都是一个顺序的、不可变的消息队列,并且可持续的添加。分区中的消息都被分配了一个序列号称之为偏移量(offset),在每一个分区中偏移量都是唯一的。
    1. 由于topic一般包含几个分区,因此无法在topic范围内保证消息的顺序性,但是对于单个分区可以保证消息的顺序性
  6. Replica:副本,一个Topic的每一个分区都有若干个副本,一个Leader和若干个Follower。
  7. Leader:每一个分区多个副本的”主”副本,生产者发送数据的对象,以及消费者消费数据的对象,都是Leader。
  8. Follower:每一个分区的多个副本的从副本,实时从Leader中同步数据,保持与Leader数据的同步。Leader发生故障时,Follower会取代Leader。
  9. Offset:offset是消息在分区的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset不跨区,Kafka保证的是分区的顺序性而不是主题的有序性。
  10. Record:实际写入Kafka中并可以被读取的消息记录。每一个Record包含key、value和timeStamp。
  11. Batch:kafka批次消息,Record真正发送到Broker端都是按照批次来发送的。