分布式实时消息队列Kafka(二)

2021-12-07 10:59:35 浏览数 (1)

分布式实时消息队列Kafka(二)

知识点01:课程回顾

  1. 什么是消息队列?
    • 用于两个系统之间或者两个模块之间实现消息传递,基于队列机制实现数据缓存
  2. 消息队列的优点是什么?
    • 实现解耦
    • 通过异步,提高性能
  3. 消息队列的缺点是什么?
    • 架构更加复杂:如果消息队列出现故障,整个系统都会故障
      • 分布式集群
      • 副本机制
    • 数据维护更加复杂:不丢失,不重复
      • 生产安全:幂等性机制
      • 消费安全:Offset
  4. 什么是同步与异步?
    • 同步:立即一致性
    • 异步:最终一致性
  5. 什么是Kafka?
    • Kafka是一个基于订阅发布模式的高性能、高吞吐的实时消息队列系统
  6. Kafka在大数据的应用场景是什么?
    • 用于实时架构中:实现数据的临时存储
  7. 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是实现辅助选举
  8. Kafka中的Topic与Partition是什么?
    • Topic:逻辑上实现数据存储的分类,类似于数据库中的表概念
    • Partition:Topic中用于实现分布式存储的物理单元,一个Topic可以有多个分区
      • 每个分区可以存储在不同的节点,实现分布式存储
    • 副本机制:Kafka中每个分区可以构建多个副本【副本个数 <= 机器的个数】
      • 将一个分区的多个副本分为两种角色
      • leader副本:负责对外提供读写请求
      • follower副本:负责与leader同步数据,如果leader故障,follower要重新选举一个成为leader
        • 选举:不由ZK实现选举,由Kafka Crontroller来决定谁是leader
  9. Kafka中的Segment是什么?
    • Segment:对分区内部的数据进行更细的划分,分区段,文件段
      • 类似于Region中划分store
      • 规则:按照文件产生的时间或者大小
      • 目的:提高写入和查询性能
        • 文件名称可以用于检索数据:用offset命名的
      • 组成:每个Segment由两个文件组成
        • .log:存储的数据
        • .index:对应.log文件的索引信息
  10. Kafka中的Offset是什么?
    • Offset是kafka中存储数据时给每个数据做的标记或者编号
      • 分区级别的编号
      • 从0开始编号
    • 功能:消费者根据offset来进行消费,保证顺序消费,数据安全

知识点02:课程目标

  1. Kafka的集群如何搭建启动?
    • 实现Kafka分布式集群的安装部署【按照笔记一步步搭建】
  2. Kafka的Topic如何创建管理?【掌握】
    • 命令行实现
    • 创建Topic
    • 查看Topic信息
    • 删除、列举Topic
  3. Kafka的Java API如何实现?【掌握类和方法】
    • Java API
    • 开发生产者
    • 开发消费者

知识点03:Kafka集群架构

  • 目标了解Kafka集群架构及角色功能
  • 路径
  • Kafka集群有哪些角色?
  • Kafka每个角色的功能是什么?
  • Zookeeper在架构中的作用是什么?
  • 实施
    • 架构角色
      • 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>

0 人点赞