跳至主要內容
分布式消息队列系统Kafka、Hbase

01:课程回顾

02:课程目标

【模块一:消费分配策略】

03:【掌握】基本规则及分配策略

  • 目标掌握Kafka消费者组中多个消费者的分配规则
  • 实施
    • 问题
      • 1-多个topic多个分区,一个消费者组有多个消费者,Kafka是怎么自动分配保证负载均衡?
        • 消费者组:CG1=>多个消费者:C1、C2、C3
        • 订阅多个Topic:Topic1 Topic2 Topic3 =>每个Topic都有多个分区
      • 2-如果有一个消费者C1故障,超过一定时间没有恢复,这个消费者A原来负责的分区怎么分摊给别的消费者?
        • C1故障以后,C1负责的分区,怎么重新分配效率更高?
    • 基本规则
      • 一个分区的数据只能由这个消费者组中的某一个消费者消费
      • 一个消费者可以消费多个分区的数据
    • 分配策略:决定了多个分区如何分配给多个消费者
      • 属性:partition.assignment.strategy = org.apache.kafka.clients.consumer.RangeAssignor
      • RangeAssignor:范围分配,默认的分配策略
      • RoundRobinAssignor:轮询分配,常见于Kafka2.0之前的版本

Znyoung大约 29 分钟Java大数据KafkaHbase
分布式消息队列系统Kafka-1

参考文档

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

知识点01:课程回顾

知识点02:课程目标

【模块二:消息队列的介绍】

知识点05:【了解】消息队列:MQ介绍

  • 目标了解消息队列的功能,应用场景及特点
  • 实施
    • 举个栗子:让A将数据传递给B、C、D三个系统分别做不同的数据处理
      • 常规做法
        image-20220118153940268.png
      • 问题
        • 读写速度:不匹配,导致接受数据的一方数据丢失或者故障,影响需求的实现
        • 架构变化:高耦合,频繁的需要将数据生产者停止运行,修改代码,影响业务
        • 串行处理:慢,挨个实现发送,按照顺序一个一个来实现数据传输
      • 解决:消息中间件=消息队列
        image-20220118154223099.png
    • 定义
      • 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
      • 简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存
    • 功能
      • 基于队列的方式,实现消息传递的数据缓存
      • 保证消息传递有序性:队列先进先出,消息队列的实现先产生的先消费
    • 应用场景
      • 用于所有需要实现实时、高性能、高吞吐、高可靠的消息传递架构中
      • 大数据应用中:作为唯一的实时数据存储平台
    • 优点
      • 实现了架构解耦:将架构中的高耦合转换为低耦合,更加灵活
      • 实现异步,提高传输性能:生产一次,所有消费都可以并行
      • 限流削峰:不用再考虑不同时间资源分配不均衡的问题
    • 缺点
      • 增加了消息队列,架构运维更加复杂:一旦消息队列故障,整个系统全部崩溃
      • 数据保证更加复杂,必须保证生产安全和消费安全:每一步都必须不丢失和不重复
  • 小结:了解消息队列的功能,应用场景及特点

Znyoung大约 24 分钟Java大数据Kafka
分布式消息队列系统Kafka-2

分布式消息队列系统Kafka(二)

资料

课程回顾

课程目标

【理解】消费者消费过程及问题

  • 目标理解Kafka消费者消费过程及消费问题
  • 实施
    • 问题1:消费者是如何消费Topic中的数据的?
    • 问题2:如果消费者故障重启,消费者怎么知道自己上次消费的位置的?
    • Kafka中消费者消费数据的规则
      • 消费者消费Kafka中的Topic根据每个分区的Offset进行消费,每次从上一次的位置继续消费
      • 第一次消费规则【消费者组id在Kafka元数据中不存在】:由属性决定

Znyoung大约 16 分钟Java大数据Kafka