Kafka笔记
介绍几个案例:
案例一
解决方案:使用消息队列进行解耦,搜索行为与点击队列行为都给消息队列,由消息队列负责转发给记录存储
案例二
解决方案:使用消息队列进行削峰,由消息队列轮流转发给服务器
案例三
解决方案:
消息队列
指保存消息的一个容器,本质是一个队列。该队列支持高吞吐,高并发,并且高可用
常见消息队列
使用Kafka的流程
基本概念
Topic:逻辑队列,可以理解为每个不同的业务场景分别有自己的TopicPartition:Topic的分区,不同分区间的消息能够并发处理Cluster:物理集群,每个物理集群里,可以建立多个不同的业务场景,即物理集群。字面意思,是Cluster的物理部分。Producer:生产者,负责将业务消息发送到Topic中Consumer:消费者,负责消费Topic中的消息ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
Partition
Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在Partition内部严格递增
Replica
Replica是消息的备份,分为Leader Replica与Follower Replica,前者对外服务,后者被动跟随。同时需要不断地检查每个Follower's Offset与 Leader's Offset是否相差过多,如果相差过多,则从集群中踢出。
高可用,当Leader挂掉时,选择一个Follower成为Leader代替其职能。
具体和Redis中一个机制很相像,推荐一个视频
BrokerGroup
一个独立的Kafka服务器就被称为Broker。它接受来自Producer的信息,并为其设置偏移量Offset,并提交消息到磁盘保存
BrokerGroup:Broker是集群的组成部分,每个集群都会自动产生一个BrokerController。
Broker零拷贝
在常规的内存拷贝中,需要经过磁盘空间->内核空间->应用空间->内核空间的状态转换,而状态转换十分耗时,因此Kafka实现了零拷贝技术,在内核态进行存储,将ReadBuffer中的数据直接拷贝到SocketBuffer中,从而减少耗时。
Kafka缺点
负载不均衡:当一个 Broker1 负载过高时,将该 Broker1 中的一个 Partition 转移到另一个 Broker2 中。也就是说,我们为了解决 Broker1 的负载过高的问题,将其内部的 Partition 转移到 Broker2 中,为了解决一个 IO 问题,引入了另一个 IO 问题,就需要权衡设备设计出一个很复杂的负载均衡策略。
视频中主要介绍了负载均衡的问题,并且下一个视频BMQ是对Kafka进行优化,解决其负载均衡问题且兼容Kafka。
标题:消息队列前世今生 - 掘金
tetech/7142834860837568520/section/7142836579948560414](juejin.cn/course/byte…)