分布式实时消息队列Kafka(二)
知识点01:课程回顾
- 什么是消息队列?
- 用于两个系统之间或者两个模块之间实现消息传递,基于队列机制实现数据缓存
- 消息队列的优点是什么?
- 实现解耦
- 通过异步,提高性能
- 消息队列的缺点是什么?
- 架构更加复杂:如果消息队列出现故障,整个系统都会故障
- 分布式集群
- 副本机制
- 数据维护更加复杂:不丢失,不重复
- 生产安全:幂等性机制
- 消费安全:Offset
- 架构更加复杂:如果消息队列出现故障,整个系统都会故障
- 什么是同步与异步?
- 同步:立即一致性
- 异步:最终一致性
- 什么是Kafka?
- Kafka是一个基于订阅发布模式的高性能、高吞吐的实时消息队列系统
- Kafka在大数据的应用场景是什么?
- 用于实时架构中:实现数据的临时存储
- Kafka中的Producer、Consumer、Consumer Group 、Broker分别是什么?
- Producer:生产者,负责写入数据到Kafka
- Consumer:消费者,负责从Kafka消费读取数据
- Consumer Group:消费者组
- Kafka中的数据消费必须以消费者组为单位
- 一个消费者组可以包含多个消费者,注意多个消费者消费的数据加在一起是一份完整的数据
- 目的:提高性能
- 消费者组消费Topic
- 消费者组中的消费者消费Topic的分区
- Broker:Kafka一个节点
- 多个节点,构建Kafka集群
- 主从架构:类似于Zookeeper
- HDFS:NameNode、DataNode
- Hbase:HMaster、HRegionServer
- Kafka:Kafka
- 主:Kafka Controler
- 从:Kafka Broker
- 启动Kafka时候,会从所有的Broker选举一个Controler,如果Controller故障,会从其他的Broker重新选举一个
- 选举:使用ZK是实现辅助选举
- Kafka中的Topic与Partition是什么?
- Topic:逻辑上实现数据存储的分类,类似于数据库中的表概念
- Partition:Topic中用于实现分布式存储的物理单元,一个Topic可以有多个分区
- 每个分区可以存储在不同的节点,实现分布式存储
- 副本机制:Kafka中每个分区可以构建多个副本【副本个数 <= 机器的个数】
- 将一个分区的多个副本分为两种角色
- leader副本:负责对外提供读写请求
- follower副本:负责与leader同步数据,如果leader故障,follower要重新选举一个成为leader
- 选举:不由ZK实现选举,由Kafka Crontroller来决定谁是leader
- Kafka中的Segment是什么?
- Segment:对分区内部的数据进行更细的划分,分区段,文件段
- 类似于Region中划分store
- 规则:按照文件产生的时间或者大小
- 目的:提高写入和查询性能
- 文件名称可以用于检索数据:用offset命名的
- 组成:每个Segment由两个文件组成
- .log:存储的数据
- .index:对应.log文件的索引信息
- Segment:对分区内部的数据进行更细的划分,分区段,文件段
- Kafka中的Offset是什么?
- Offset是kafka中存储数据时给每个数据做的标记或者编号
- 分区级别的编号
- 从0开始编号
- 功能:消费者根据offset来进行消费,保证顺序消费,数据安全
- Offset是kafka中存储数据时给每个数据做的标记或者编号
知识点02:课程目标
- Kafka的集群如何搭建启动?
- 实现Kafka分布式集群的安装部署【按照笔记一步步搭建】
- Kafka的Topic如何创建管理?【掌握】
- 命令行实现
- 创建Topic
- 查看Topic信息
- 删除、列举Topic
- Kafka的Java API如何实现?【掌握类和方法】
- Java API
- 开发生产者
- 开发消费者
知识点03:Kafka集群架构
- 目标:了解Kafka集群架构及角色功能
- 路径
- 实施
- 架构角色
- Kafka
- Zookeeper
- Kafka中的每个角色以及对应的功能
- 分布式主从架构
- 主:Kafka Controller
- 负责管理所有从节点:Topic、分区和副本
- 每次启动集群,会从所有Broker中选举一个Controller,由ZK实现
- 从:Kafka Broker
- 对外提供读写请求
- 其他的Broker监听Controller,如果Controller,会重新从Broker选举一个新的
- ZK的功能
- 辅助选举Active的主节点
- 存储元数据
- 架构角色
- 小结
- kafka是一个主从架构,整体对外提供分布式读写
- ZK主要负责选举Controller和实现元数据存储
知识点04:Kafka分布式集群部署
知识点05:Kafka启动与关闭
知识点06:Topic管理:创建与列举
知识点07:Topic管理:查看与删除
知识点08:生产者及消费者测试
知识点09:可视化工具Kafka Tool
- 目标:了解Windows版可视化工具Kafka Tool的使用
- 路径
- step1:安装Kafka Tool
- step2:启动构建连接
- step3:查看Kafka集群信息
- 实施
- 安装Kafka Tool:不断下一步即可
- 构建集群连接:连接Kafka集群
- 查看集群信息
- 小结
- 可视化工具,界面或者交互性不是很友好
- 后面会学习:Kafka Eagle
知识点10:Kafka集群压力测试
知识点11:Kafka API 的应用
知识点12:生产者API:构建KafkaProducer
知识点13:生产者API:生产数据到Kafka
知识点14:消费者API:构建KafkaConsumer
知识点15:消费者API:消费Topic数据
附录一:Maven依赖
代码语言:javascript复制<repositories>
<repository>
<id>aliyunid>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
repository>
repositories>
<dependencies>
<dependency>
<groupId>org.apache.kafkagroupId>
<artifactId>kafka-clientsartifactId>
<version>2.4.1version>
dependency>
<dependency>
<groupId>org.apache.kafkagroupId>
<artifactId>kafka-streamsartifactId>
<version>2.4.1version>
dependency>
dependencies>
cord.key(); //获取Value String value = record.value(); System.out.println(topic "t" partition "t" offset "t" key "t" value); } ```
- 小结
- KafkaConsumer:subscribe:负责订阅Kafka的Topic
- KafkaConsumer:poll:负责拉取消费数据
- ConsumerRecords:消费到的所有数据的集合
- ConsumerRecord:消费到的每一条数据
- topic:获取Topic
- partition:获取分区
- offset:获取offset
- key:获取key
- value:获取value
附录一:Maven依赖
代码语言:javascript复制<repositories>
<repository>
<id>aliyunid>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
repository>
repositories>
<dependencies>
<dependency>
<groupId>org.apache.kafkagroupId>
<artifactId>kafka-clientsartifactId>
<version>2.4.1version>
dependency>
<dependency>
<groupId>org.apache.kafkagroupId>
<artifactId>kafka-streamsartifactId>
<version>2.4.1version>
dependency>
dependencies>