当前位置: 首页 > news >正文

Kafka是什么,架构是什么样的?Kafka概述

Kafka是一个高性能,高扩展性,高可用,支持消息持久化的消息队列        

Kafka本质就是一个消息队列,说白了就是一个链表,链表的每个节点就是一个消息,每个节点有一个序号,叫做offset,用来记录消息的位置

假设有两个服务,A服务和B服务,A服务发送消息200qps,B只有100qps的处理能力,这时候就需要一个中间件来缓和一下A和B的关系,而B依据自己的消费能力消费链表中的消息,不断的更新已处理消息的offset的值

Kafka高性能

其中,此消息队列是一个单独进程,producer发送消息到不同的topictopic中又分为一个个的partition,一个消费者消息一个partition的信息,这样就减少了消息争抢的情况

Kafka高扩展性

如果partition过多,可能会影响单机cpu和内存过高,从而影响性能,这时候就可以把partition分散到不同的机器中,这样的一台机器我们称为一个broker,这样我们就可以通过增加broker来分散压力

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     

Kafka高可用

到这里还有个问题,如果broker挂了,那么broker中的partition里的消息也就没了,解决方法就是给partition加备胎

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

我们可以给partition多增加几个副本,他们统称replicas,将replicas中的partition分为leaderfollower,关系如图

leader负责生产者和消费者的读写请求follower负责同步leader的消息将leader和follower分散到不同的broker上,这样leader所在的broker挂了也不会影响follower所在的broker,并且还能选举一个新的leader顶上

Kafka的持久化和过期策略

如果broker都挂了那数据不就都没了?

所以我们还要把数据持久化到磁盘中,但是磁盘的容量也是有限的,所以我们要给数据加上保留策略(retention policy)如果磁盘数据超过一定大小或者消息存放超过一定时间,就会被清理掉

consumer group

还有个问题就是,按照现在的消费策略,新增的消费者只能跟着最新的offset接着消费,如果我想消费者从某个指定的offset进行消费呢?

于是我们引入消费者组(consumer group)的概念,groupA和groupB,不同的消费者组维护自己的消费进度

zookeeper

到现在,组件太多了,而且每个组件都有自己的数据和状态,zookeeper就是用来统一维护这些组件的状态信息,它会定期和broker通信和获取整个Kafka集群的状态,比如:某些broker是不是挂了,某些consumer group消费到哪了

Kafka的应用场景

对流量进行削峰填谷,秒杀活动,大数据和日志的异构同步

http://www.dtcms.com/a/395317.html

相关文章:

  • TCN时序卷积网络、CNN、RNN、LSTM、GRU神经网络工业设备运行监测、航空客运量时间数据集预测可视化|附代码数据
  • 【HarmonyOS】HMRouter关键原理-动态import
  • 【Python】面向对象(三)
  • 05-django项目的跨域处理
  • go语言并发
  • Qt QSS 美化完整教程文档
  • jwt与token+redis,哪种方案更好用?
  • 基于react的前端项目开发和实战总结(umi框架)
  • 【iOS】YYModel
  • 修改docker配置使其支持本机tcp连接
  • ReportFragment:Android 生命周期的桥梁与兼容性解决方案
  • 力扣Hot100--234.回文链表
  • 视觉语言大模型(VLM)的产业落地:从Qwen-VL技术解析到医疗、车险行业革新
  • 零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx Web服务
  • 一个硬盘选MBR 还是GPT
  • 【含文档+PPT+源码】基于GPT+SpringBoot的个人健康管理与咨询系统设计与实现
  • 【项目实战 Day5】springboot + vue 苍穹外卖系统(Redis + 店铺经营状态模块 完结)
  • 旧衣回收小程序:非技术视角下的价值重构与发展前景
  • 使用vue-i18n实现语言切换
  • 做小程序找哪家公司,解析小程序开发定制公司哪家适合你
  • 【python】python进阶——math模块
  • NHD-6108 全自动远、近光检测仪:智能高效的汽车灯光检测方案
  • 《 Linux 点滴漫谈: 一 》开源之路:Linux 的历史、演进与未来趋势
  • C#和微软System.Speech.Synthesis库实现语音合成
  • C++概述 (一)
  • 【开题答辩全过程】以 基于springboot的高校仪器共享管理系统设计和实现为例,包含答辩的问题和答案
  • 【python】FastAPI简介
  • IDEA lombok注解无效的问题,运行时提示java: 找不到符号或者方法
  • Windows 系统部署 Kronos 金融 K 线基础模型——基于 EPGF 架构
  • 010 Rust流程控制