Kafka最初由LinkedIn公司开发,后来成为Apache项目的一部分,是一个可水平扩展、高吞吐量、分布式的发布-订阅消息系统,一个基于ZooKeeper协调管理的分布式流式处理平台,其核心模块使用Scala语言开发,支持多种语言的客户端。其基本架构如下图所示:
基本概念
主题
一组消息抽象归纳为一个主题,即一个主题就是对消息的一个分类。
消息(Record)
Kafka通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体构成。消息支持Gzip、Snappy、LZ4这三种压缩方式。
分区和副本
一个主题可被分成一个或多个分区,每个分区由一系列有序、不可变的消息组成,是一个有序队列,每个分区在物理上对应为一个文件夹。
Leader副本和Follower副本
一个分区可以有多个副本,其数据需保持一致,其中有一个作为Leader,其他作为Follower,各Follower从Leader同步数据来保证数据一致性,在Leader失效后,在Follower之间选举一个新的分区副本作为Leader。
偏移量
每条消息在日志文件中的位置都会对应一个按序递增的偏移量,偏移量是一个分区下严格有序的逻辑值,不表示消息在磁盘上的物理位置。
日志段
日志可被划分为多个日志段,它是Kafka日志对象分片的最小单位,是一个逻辑概念。
代理(Broker)
一个Kafka集群由多个Kafka实例构成,在集群中,每个Kafka实例称为代理,每个代理都有唯一的标识id。代理是无状态的,即代理不记录消息是否被消费,消息偏移量的管理交由消费者自己或组协调器来维护。
生产者
生产者负责将消息发生给代理。
消费者和消费组
消费者以pull方式拉取数据,每个消费者都属于一个特定消费组,默认消费组为test-consumer-group,每个消费组都有唯一的标识id。
同一个主题的一条消息只能被同一个消费组下某一个消费者消费,但是不同消费组的消费者可同时消费该消息。
ISR(In-sync Replica)
Kafka在ZooKeeper中动态维护了一个ISR,即保存同步的副本列表,该列表保存的是与Leader副本保持消息同步的所有副本对应的代理节点的id。
ZooKeeper
ZooKeeper是一个分布式应用程序协调服务框架,分布式应用程序可以基于ZookKeeper来实现同步服务、配置维护、命名服务等,Kafka利用ZooKeeper保存相应元数据信息,Kafka元数据信息包括如代理节点信息、Kafka集群信息、主题信息等等。
安装与配置
1. 首先