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

简介: 分布式实时消息队列Kafka(一)Kafka的介绍

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

知识点01:课程回顾

  1. Hbase是什么?
  • 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据
  1. Hbase的设计思想是什么?
  • 冷热数据分离
  • 热数据:大概可能被使用的数据,新产生的数据
  • 写入内存
  • 冷数据:小概率被读取的数据,产生一段时间的数据
  • 写入磁盘
  1. 什么是列族,为什么要设计列族?
  • 列族就是对列进行分组存储
  • Hbase是一个按列存储的数据库,每张表可以存储上百万列
  • 如果对列做了分组,加快数据读取的速度
  1. Hbase中的分区划分规则及数据分区规则分别是什么?
  • 分区划分规则:范围分区,根据rowkey的前缀将一个完整区间划分为多个连续范围区间
  • 数据分区规则:根据rowkey前缀匹配决定写入哪个分区
  1. Region的内部存储结构是什么?
  • Store:根据列族进行划分,加快数据读的效率,对分区内部的数据进行了划分
  • MemStore:内存存储区域,写入数据
  • StoreFile:内存溢写生成的数据文件
  1. 什么是热点问题?怎么解决热点?
  • 现象:当大量的请求全部集中在某个region或者regionserver中,出现了热点现象
  • 原因:数据集中写入了某个Region
  • 情况:表只有一个Region或者表有多个region,但是rowkey是连续的
  • 解决
  • 创建表的时候要做预分区
  • 设计Rowkey要构建散列
  1. Rowkey如何设计,设计规则是什么?
  • 长度原则:满足业务情况,长度越短越好
  • 组合原则:将最常用的几个条件字段组合构建rowkey
  • 业务原则:尽量贴合业务设计rowkey,将最常用的查询条件作为rowkey的前缀
  • 散列原则:构建不连续的Rowkey
  • 唯一原则:每一条Rowkey唯一对应一条数据
  1. 什么是二级索引?为什么要构建二级索引
  • Hbase使用Rowkey作为唯一索引,二级就是基于Rowkey之上构建一层索引
  • 只有按照rowkey的前缀查询才是走索引的查询,工作中大量的查询需求都不满足,只能走全表扫描,性能比较差
  • 如果构建二级索引,通过走两次索引代替全表扫描,提高查询性能
  1. 请简述Hbase写入数据的流程
  • step1:客户端连接ZK,获取meta表的地址,读取meta表的数据
  • step2:根据表名和rowkey,确定要写入的region的名称和地址
  • step3:请求对应RegionServer写入数据,先写入WAL
  • step4:根据列族来判断写入哪个Store中,写入对应的memstore
  1. MapReduce读取Hbase数据的原理及返回值是什么?
  • TableInputFormat:实现读取Hbase的数据
  • K:Rowkey的字节数组:ImmutableBytesWitale
  • V:Rowkey的所有数据:Result
  1. MapReduce写入Hbase的原理和要求是什么?
  • TableOutputFormat:实现写入数据到Hbase中
  • 要求:输出的Value类型必须为Put类型
  1. 什么是BulkLoad,用于什么场景解决什么问题?
  • Bulkload:是一种可以将数据直接转换为HFILE文件加载到Hbase表中的数据写入的方式
  • 数据不经过内存,直接写入HDFS,成为StoreFile文件
  • 大量数据并发写入hbase
  1. 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版本的网站架构

  • 问题1:读的请求比较多,MySQL无法支撑这么大的读并发,怎么解决?
  • 引入Redis,作为读缓存,解决高并发的读

  • 问题2:如果写的请求也比较多怎么办?
  • 引入消息队列:解决高并发写问题

  • 小结

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

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

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

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

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

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

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

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

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

  • 实施
  • 角色
  • 流程
  • 小结

知识点08:c

  • 目标掌握Kafka的功能、特点及应用场景
  • 路径
  • Kafka是什么?
  • Kafka在大数据中的应用场景是什么?
  • 实施
  • 定义
  • 应用场景
  • 小结

知识点09:Kafka的特点

  • 目标掌握Kafka的特点
  • 路径
  • 为什么不用HDFS?
  • 为什么不用Hbase?
  • 为什么不用Zookeeper?
  • 实施
  • 高性能
  • 高并发
  • 高可靠
  • 高吞吐
  • 高安全性
  • 高灵活性
  • 小结

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

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

  • 实施
  • Broker
  • Producer
  • Consumer
  • Consumer Group
  • 小结

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

  • 目标掌握Kafka中的Topic、Partition概念及其功能
  • 路径
  • 实施
  • Topic
  • Partition
  • 小结

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

  • 目标掌握Kafka中的分区副本机制
  • 路径
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hzk95MA-1625806073233)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328164309902.png)]
  • 实施
  • 小结

知识点13:Kafka概念:Segment

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

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

知识点14:Kafka概念:Offset

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

  • 实施
  • 定义
  • 功能
  • 生成
  • 举例
  • 假设一个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中的概念与其他工具的对比,加深理解
  • 路径
  • HDFS:分布式文件离线存储系统
  • Hbase:分布式NoSQL实时列存储数据库
  • Kafka:分布式实时消息队列系统
  • 实施
概念 HDFS Hbase Kafka
第一层逻辑划分
第二层逻辑划分
存储分区及划分规则
分区存储规则
分区安全
存储单元
架构
HA

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


目录
相关文章
|
2月前
|
消息中间件 存储 负载均衡
2024消息队列“四大天王”:Rabbit、Rocket、Kafka、Pulsar巅峰对决
本文对比了 RabbitMQ、RocketMQ、Kafka 和 Pulsar 四种消息队列系统,涵盖架构、性能、可用性和适用场景。RabbitMQ 以灵活路由和可靠性著称;RocketMQ 支持高可用和顺序消息;Kafka 专为高吞吐量和低延迟设计;Pulsar 提供多租户支持和高可扩展性。性能方面,吞吐量从高到低依次为
189 1
|
3月前
|
消息中间件 Java Kafka
初识Apache Kafka:搭建你的第一个消息队列系统
【10月更文挑战第24天】在数字化转型的浪潮中,数据成为了企业决策的关键因素之一。而高效的数据处理能力,则成为了企业在竞争中脱颖而出的重要武器。在这个背景下,消息队列作为连接不同系统和服务的桥梁,其重要性日益凸显。Apache Kafka 是一款开源的消息队列系统,以其高吞吐量、可扩展性和持久性等特点受到了广泛欢迎。作为一名技术爱好者,我对 Apache Kafka 产生了浓厚的兴趣,并决定亲手搭建一套属于自己的消息队列系统。
123 2
初识Apache Kafka:搭建你的第一个消息队列系统
|
4月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
4月前
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
|
4月前
|
消息中间件 中间件 Kafka
解锁Kafka等消息队列中间件的测试之道
在这个数字化时代,分布式系统和消息队列中间件(如Kafka、RabbitMQ)已成为日常工作的核心组件。本次公开课由前字节跳动资深专家KK老师主讲,深入解析消息队列的基本原理、架构及测试要点,涵盖功能、性能、可靠性、安全性和兼容性测试,并探讨其主要应用场景,如应用解耦、异步处理和限流削峰。课程最后设有互动答疑环节,助你全面掌握消息队列的测试方法。
|
4月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
6月前
|
图形学 人工智能 C#
从零起步,到亲手实现:一步步教你用Unity引擎搭建出令人惊叹的3D游戏世界,绝不错过的初学者友好型超详细指南 ——兼探索游戏设计奥秘与实践编程技巧的完美结合之旅
【8月更文挑战第31天】本文介绍如何使用Unity引擎从零开始创建简单的3D游戏世界,涵盖游戏对象创建、物理模拟、用户输入处理及动画效果。Unity是一款强大的跨平台游戏开发工具,支持多种编程语言,具有直观编辑器和丰富文档。文章指导读者创建新项目、添加立方体对象、编写移动脚本,并引入基础动画,帮助初学者快速掌握Unity开发核心概念,迈出游戏制作的第一步。
377 1
|
6月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
6月前
|
消息中间件 传感器 缓存
为什么Kafka能秒杀众多消息队列?揭秘它背后的五大性能神器,让你秒懂Kafka的极速之道!
【8月更文挑战第24天】Apache Kafka作为分布式流处理平台的领先者,凭借其出色的性能和扩展能力广受好评。本文通过案例分析,深入探讨Kafka实现高性能的关键因素:分区与并行处理显著提升吞吐量;批量发送结合压缩算法减少网络I/O次数及数据量;顺序写盘与页缓存机制提高写入效率;Zero-Copy技术降低CPU消耗;集群扩展与负载均衡确保系统稳定性和可靠性。这些机制共同作用,使Kafka能够在处理大规模数据流时表现出色。
84 3
|
6月前
|
消息中间件 存储 Kafka
ZooKeeper助力Kafka:掌握这四大作用,让你的消息队列系统稳如老狗!
【8月更文挑战第24天】Kafka是一款高性能的分布式消息队列系统,其稳定运行很大程度上依赖于ZooKeeper提供的分布式协调服务。ZooKeeper在Kafka中承担了四大关键职责:集群管理(Broker的注册与选举)、主题与分区管理、领导者选举机制以及消费者组管理。通过具体的代码示例展示了这些功能的具体实现方式。
188 2