Kafka笔记 | 青训营笔记

77 阅读3分钟

Kafka笔记

介绍几个案例:

案例一

image.png 解决方案:使用消息队列进行解耦,搜索行为与点击队列行为都给消息队列,由消息队列负责转发给记录存储

案例二

image.png 解决方案:使用消息队列进行削峰,由消息队列轮流转发给服务器

案例三

image.png 解决方案:

image.png

消息队列

指保存消息的一个容器,本质是一个队列。该队列支持高吞吐,高并发,并且高可用

常见消息队列

image.png

使用Kafka的流程

image.png

基本概念

image.png

  1. Topic:逻辑队列,可以理解为每个不同的业务场景分别有自己的Topic
  2. Partition:Topic的分区,不同分区间的消息能够并发处理
  3. Cluster:物理集群,每个物理集群里,可以建立多个不同的业务场景,即物理集群。字面意思,是Cluster的物理部分。
  4. Producer:生产者,负责将业务消息发送到Topic中
  5. Consumer:消费者,负责消费Topic中的消息
  6. ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

Partition

image.png

Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在Partition内部严格递增

Replica

image.png

Replica是消息的备份,分为Leader ReplicaFollower Replica,前者对外服务,后者被动跟随。同时需要不断地检查每个Follower's Offset与 Leader's Offset是否相差过多,如果相差过多,则从集群中踢出。

高可用,当Leader挂掉时,选择一个Follower成为Leader代替其职能。 具体和Redis中一个机制很相像,推荐一个视频

BrokerGroup

一个独立的Kafka服务器就被称为Broker。它接受来自Producer的信息,并为其设置偏移量Offset,并提交消息到磁盘保存

BrokerGroup:Broker是集群的组成部分,每个集群都会自动产生一个BrokerController。

Broker零拷贝

image.png

在常规的内存拷贝中,需要经过磁盘空间->内核空间->应用空间->内核空间的状态转换,而状态转换十分耗时,因此Kafka实现了零拷贝技术,在内核态进行存储,将ReadBuffer中的数据直接拷贝到SocketBuffer中,从而减少耗时。

Kafka缺点

image.png

负载不均衡:当一个 Broker1 负载过高时,将该 Broker1 中的一个 Partition 转移到另一个 Broker2 中。也就是说,我们为了解决 Broker1 的负载过高的问题,将其内部的 Partition 转移到 Broker2 中,为了解决一个 IO 问题,引入了另一个 IO 问题,就需要权衡设备设计出一个很复杂的负载均衡策略。

视频中主要介绍了负载均衡的问题,并且下一个视频BMQ是对Kafka进行优化,解决其负载均衡问题且兼容Kafka。

标题:消息队列前世今生 - 掘金

tetech/7142834860837568520/section/7142836579948560414](juejin.cn/course/byte…)