分布式实时消息队列Kafka

Posted 大数据Manor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式实时消息队列Kafka相关的知识,希望对你有一定的参考价值。

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

知识点01:课程回顾

  1. Hbase是什么?

    • 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据
  2. Hbase的设计思想是什么?

    • 冷热数据分离
    • 热数据:大概可能被使用的数据,新产生的数据
      • 写入内存
    • 冷数据:小概率被读取的数据,产生一段时间的数据
      • 写入磁盘
  3. 什么是列族,为什么要设计列族?

    • 列族就是对列进行分组存储
    • Hbase是一个按列存储的数据库,每张表可以存储上百万列
    • 如果对列做了分组,加快数据读取的速度
  4. Hbase中的分区划分规则及数据分区规则分别是什么?

    • 分区划分规则:范围分区,根据rowkey的前缀将一个完整区间划分为多个连续范围区间
    • 数据分区规则:根据rowkey前缀匹配决定写入哪个分区
  5. Region的内部存储结构是什么?

    • Store:根据列族进行划分,加快数据读的效率,对分区内部的数据进行了划分
      • MemStore:内存存储区域,写入数据
      • StoreFile:内存溢写生成的数据文件
  6. 什么是热点问题?怎么解决热点?

    • 现象:当大量的请求全部集中在某个region或者regionserver中,出现了热点现象

    • 原因:数据集中写入了某个Region

    • 情况:表只有一个Region或者表有多个region,但是rowkey是连续的

    • 解决

      • 创建表的时候要做预分区

      • 设计Rowkey要构建散列

  7. Rowkey如何设计,设计规则是什么?

    • 长度原则:满足业务情况,长度越短越好
    • 组合原则:将最常用的几个条件字段组合构建rowkey
    • 业务原则:尽量贴合业务设计rowkey,将最常用的查询条件作为rowkey的前缀
    • 散列原则:构建不连续的Rowkey
    • 唯一原则:每一条Rowkey唯一对应一条数据
  8. 什么是二级索引?为什么要构建二级索引

    • Hbase使用Rowkey作为唯一索引,二级就是基于Rowkey之上构建一层索引
    • 只有按照rowkey的前缀查询才是走索引的查询,工作中大量的查询需求都不满足,只能走全表扫描,性能比较差
    • 如果构建二级索引,通过走两次索引代替全表扫描,提高查询性能
  9. 请简述Hbase写入数据的流程

    • step1:客户端连接ZK,获取meta表的地址,读取meta表的数据
    • step2:根据表名和rowkey,确定要写入的region的名称和地址
    • step3:请求对应RegionServer写入数据,先写入WAL
    • step4:根据列族来判断写入哪个Store中,写入对应的memstore
  10. MapReduce读取Hbase数据的原理及返回值是什么?

    • TableInputFormat:实现读取Hbase的数据
    • K:Rowkey的字节数组:ImmutableBytesWitale
    • V:Rowkey的所有数据:Result
  11. MapReduce写入Hbase的原理和要求是什么?

    • TableOutputFormat:实现写入数据到Hbase中
    • 要求:输出的Value类型必须为Put类型
  12. 什么是BulkLoad,用于什么场景解决什么问题?

    • Bulkload:是一种可以将数据直接转换为HFILE文件加载到Hbase表中的数据写入的方式
      • 数据不经过内存,直接写入HDFS,成为StoreFile文件
    • 大量数据并发写入hbase
  13. Java API

    • step1:构建连接
    • step2:根据操作要构建不同的对象
      • DDL:Admin
        • admin.createNamespace
        • admin.createTable
      • DML:Table
        • table.put(Put)
        • table.delete(Delete)
        • table.getScanner(Scan)
          • ResultScanner 【 Result 【 Cell 】】

知识点02:课程目标

知识点03:传统架构面临的问题

  • 目标了解传统架构中存在的问题及解决方案

  • 路径

    • step1:传统网站的存储架构
    • step2:高并发读问题
    • step3:高并发写问题
  • 实施

    • Web1.0版本的网站架构

      image-20210328152427450

    • 问题1:读的请求比较多,mysql无法支撑这么大的读并发,怎么解决?

      • 引入Redis,作为读缓存,解决高并发的读

      image-20210328152502315

    • 问题2:如果写的请求也比较多怎么办?

      • 引入消息队列:解决高并发写问题

      image-20210328153057313

  • 小结

知识点04:消息队列:MQ介绍

  • 目标:了解消息队列的功能,应用场景及特点

  • 路径

    • step1:消息队列是什么?
    • step2:什么情况下需要使用消息队列?
    • step3:消息队列的优缺点是什么?
  • 实施

    • 定义
      • 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
      • 简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存
    • 功能
      • 基于队列的方式,实现数据缓存
    • 应用场景
      • 用于所有需要实现实时、高性能、高吞吐、高可靠的消息传递架构中
    • 优点
      • 实现了架构解耦
      • 保证了最终一致性
      • 实现异步,提供传输性能
    • 缺点
      • 增加了消息队列,架构运维更加复杂
      • 数据保证更加复杂,必须保证生产安全和消费安全
  • 小结

知识点05:消息队列:同步与异步

  • 目标了解什么是同步与异步

  • 路径

    • step1:什么是同步与异步?
    • step2:同步的特点和应用场景?
    • step3:异步的特点和应用场景?
  • 实施

    • 同步的概念
      • 流程
        • step1:用户提交请求
        • step2:后台处理请求
        • step3:将处理的结果返回给用户
      • 特点:用户看到的结果就是我处理好的结果
      • 场景:去银行存钱、转账等,必须看到真正处理的结果才能表示成功,实现立即一致性
    • 异步的概念
      • 流程
        • step1:用于提交请求
        • step2:后台将请求放入消息队列,等待处理,返回给用户一个临时结果
        • step3:用户看到临时的结果,真正的请求在后台等待处理
      • 特点:用户看到的结果并不是我们已经处理的结果
      • 场景:用户暂时不需要关心真正处理结果的场景下,只要保证这个最终结果是用户想要的结果即可,实现最终一致性
    • 数据传递的同步与异步
      • A给B发送消息:基于UDP协议
      • A给B发送消息:基于TCP协议
  • 小结

知识点06:消息队列:点对点模式

  • 目标了解消息队列中消息传递的点对点模式

  • 路径

    image-20210328155147841

  • 实施

    • 角色
      • 生产者
      • 消息队列
      • 消费者
    • 流程
      • step1:
  • 小结

知识点07:消息队列:订阅发布模式

  • 目标掌握消息队列中消息传递的订阅发布模式

  • 路径

    image-20210328160643162

  • 实施

    • 角色
    • 流程
  • 小结

知识点08:Kafka的介绍

  • 目标掌握Kafka的功能、特点及应用场景

  • 路径

    • Kafka是什么?
    • Kafka在大数据中的应用场景是什么?
  • 实施

    • 定义
    • 应用场景
  • 小结

知识点09:Kafka的特点

  • 目标掌握Kafka的特点

  • 路径

    • 为什么不用HDFS?
    • 为什么不用Hbase?
    • 为什么不用Zookeeper?
  • 实施

    • 高性能
    • 高并发
    • 高可靠
    • 高吞吐
    • 高安全性
    • 高灵活性
  • 小结

知识点10:Kafka概念:Producer、Broker、Consumer

  • 目标掌握Kafka中的Producer、Broker、Consumer概念及其功能

  • 路径

    image-20210328161427289

  • 实施

    • Broker

    • Producer

    • Consumer

    • Consumer Group

  • 小结

知识点11:Kafka概念:Topic、Partition

  • 目标掌握Kafka中的Topic、Partition概念及其功能

  • 路径

    image-20210328163508888
  • 实施

    • Topic
    • Partition
  • 小结

知识点12:Kafka概念:分区副本机制

  • 目标掌握Kafka中的分区副本机制

  • 路径

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hzk95MA-1625806073233)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328164309902.png)]

  • 实施

  • 小结

知识点13:Kafka概念:Segment

  • 目标掌握Kafka中的Segment概念及其功能

  • 路径

    image-20210328164220108

  • 实施

    • 定义:对每个分区的数据进行了更细的划分,先写入的数据会先生成一个文件,存储到一定条件以后,将数据写入另外一个文件,每个文件就叫Segment文件
  • 小结

知识点14:Kafka概念:Offset

  • 目标掌握Kafka中的Offset概念及其功能

  • 路径

    image-20210328163824722

  • 实施

    • 定义

    • 功能

    • 生成

    • 举例

      • 假设一个Topic有3个分区

        • 现在往Topic中写入了10条数据

        • part0

          offset		K		value
          0			1		hadoop
          1			4		hadoop
          2			7		hadoop
          3			10		hadoop
          
        • part1

          offset		K		value
          0			2		hadoop
          1			5		hadoop
          2			8		hadoop
          
        • part2

          offset		K		value
          0			3		hadoop
          1			6		hadoop
          2			9		hadoop
          
  • 小结

知识点15:Kafka概念:概念对比总结

  • 目标:掌握Kafka中的概念与其他工具的对比,加深理解

  • 路径

    image-20210328162448721

    • HDFS:分布式文件离线存储系统

    • Hbase:分布式NoSQL实时列存储数据库

    • Kafka:分布式实时消息队列系统

  • 实施

    概念HDFSHbaseKafka
    第一层逻辑划分
    第二层逻辑划分
    存储分区及划分规则
    分区存储规则
    分区安全
    存储单元
    架构
    HA
概念HDFSHbaseKafka
第一层逻辑划分
第二层逻辑划分
存储分区及划分规则
分区存储规则
分区安全
存储单元
架构
HA
  • 小结

以上是关于分布式实时消息队列Kafka的主要内容,如果未能解决你的问题,请参考以下文章

分布式实时消息队列Kafka

分布式实时消息队列Kafka

分布式实时消息队列Kafka

Kafka 消息队列系列之分布式消息队列Kafka

分布式消息队列之kafka

消息队列和缓存的区别