一、Kafka重要核心概念
- 消息:消息是Kafka中最基本的数据单元。消息由一串字节构成,其中主要由key和value构成,key和value也都是byte数组。
- Topic&分区&Log:Topic是用于存储消息的逻辑概念,可以看作一个消息集合,生产者负责推送,消费者通过拉取消费;每个topic下多个不同分区包含信息是不同的,每个消息在分区内唯一;分区在逻辑上对应着一个Log,当生产者将消息写入分区时,实际上是写入到了分区对应的Log中。
- Broker:一个kafka的节点,独占一台服务器。接收与持久化消息,处理消费者的请求做出响应。
- Cluster:多个Broker组成一个Cluster集群。
- 生产者:主要工作是生产消息,并将消息按照一定的 规则推送到Topic的分区中。
- 消费者:主要工作是从Topic中拉取消息,并对消息 进行消费。
- 保留策略:①通过时间删除保存的消息;②通过Topic存储数据大小删除最旧的消息。
- 日志压缩:由于消息中key与value之间的关系不断变化,保留最新的value值。类似下图:
- 副本:每个分区可以存在多个副本,提高消息的可靠性,容错性。
- ISR集合:表示当前可用且消息与Leader相差不多的副本集合。符合一下两个要求:
- 副本所在节点必须维持着与ZooKeeper的连接;
- 副本最后一条消息的offset与Leader副本的最后一条消息的 offset之间的差值不能超出指定的阈值。
- HW(HighWatermark):标记特数的offset,消费者处理消息的时候,只可以拉取HW之前的消息,之后的消息不可见。
- LEO(Log End Offset):是所有的副本都会有的一个offset标记,它指向追加到当前副本的最后一个消息的offset。当生产者向Leader增加副本时,Leader的LEO会增加,当Follower成功从Leader拉取更新到本地的时候,LEO也会追加。
二、Kafka源码环境准备
①Java环境,根据Kafka官网需求对Java对应版本进行全局变量配置
②Scala,配置与Java一样比较简单
③Gradle:是一个自动化构建工具
官方网站:Gradle Build Tool,可以根据自己需求来下载。同时进行配置全局变量也在idea中声明。
④ZooKeeper的在windows下配置,下载安装包,分别配置相关目录如日志目录等。可以通过server.properties配置文件修改。
⑤源码下载
官网:Apache Kafka,找到自己需要查看的进行源码下载。
⑥一切准备就绪,使用idea打开测试,开始构建项目。