kafka介绍(一)

news2025/8/3 10:53:52

0.0 什么是MQ

这个部分,需要简单的解答一下,其实MQ就是消息队列,那么本质上,就是一个 FIFO的队列数据结构。

因此,早期的使用方法,都是启动一个线程发送消息,写入消息队列,作为消息缓存,然后再启动一个线程消费消息。早期的windows程序(桌面程序)的设计方法。

后期,随着分布式微服务的快速发展,消息这个东西变成了组件,变成了中间件,直接分离出来使用了。

1.0 为什么需要Kafka

其实从需要kafka的角度,不如从需要MQ的角度来说.

从本质上来讲,是因为互联网发展太快,使用单体架构无疑会是的体量巨大。而微服务架构可以很好的解决这个问题,但是服务与服务之间会还是出现耦合、访问控制等问题。消息队列可以很好的满足这些需要。重要场景:

异步处理:

随着业务的不断扩展,通常会在原来的业务上不断地添加新的服务,这样会导致请求的链路非常长。比如,最开始电商,只需要处理下单,扣库存,后来处理积分,短信通知等等。再比如我们自己的业务,最开始只需要处理数据处理,后来需要监控数据分析,再后来需要输出报表清单。

而这些业务的共同特点就是及时性,要求不是那么的高。

所以只需要在下单结束的时候结束那个流程,把消息传给消息队列中就可以直接返回响应了。而且短信服务和积分服务可以并行的消费这条消息。这样响应的速度更快,用户体验更好服务异步执行,系统整体latency(相对使用同步机制而言)也下降了

服务解耦

在采用API的模式下,可能会出现API格式的定义问题,对于任何API的改变,都有可能影响到原来的服务,尤其是在后续不断增加业务的情况下,就会出现这样的情况。所以这个时候,采用MQ就是最好的过程。

说明一下,服务的解耦,绝对不是简单的API调用问题,更多的可能是API调用的不确定性问题。比如调用深度的问题,也就是API聚合问题,还有就是

上面说的新加了短信服务和积分服务,现在又需要添加数据分析服务、以后可能又加一个策略服务等。可以发现订单的后续链路一直在增加,为了适配这些功能,就需要不断的修改订单服务,下游任何一个服务的接口改变都可能会影响到订单服务。

流量治理

后端服务相对而言是比较脆弱的,因为业务较重,处理时间长。如果碰到高QPS情况,很容易顶不住。比如说题库数据写入到ES索引中,数据都是千万级别的。这个时候使用中间件来做一层缓冲,消息队列是个很不错的选择。

2.0 kafka介绍

kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。

因为他是分布式的,所以可以很好的扩容,多副本保持,高吞吐量。这些决定了他的效率特别高。

3.0 使用场景

1、日志收集,可以用kafka进行日志收集,收集各个服务的日志,通过统一接口发送给不同的消费者。

2、用户追踪,可以使用kafka进行用户各种活动的最终,比如浏览页面,点击活动

3、运营指标,用于完成各种运营指标的监视

4、消息队列,解耦生产者和消费者,缓存消息

5、临时数据库,因为他可以实现多副本,保证了数据的不丢失,所以是可以作为副本实用的。

注意:随着新版本的kafka去掉了zookeeper,是的kafka可以单独使用,简化了复杂度,从而可以替代rabbitMQ的地步。

4.0 kafka版本

Apache自从接受LinkedIn捐赠Kafka之后,于2012年1月4日对外正式发布0.7这个版本,10年后的今天,Kafka已经陆续发布了46个版本 仔细研究发现Kafka目前总共演进了7个大版本,分别是0.7、0.8、0.9、0.10、0.11、1.0和2.0,比如2.0大版本中,期间历经了19个小版本,目前2.8.0去除对ZooKeeper的依赖算是一个大的更新

我们整理了一张图,用来阐述Kafka更新中有几个里程碑的一些特性,希望可以帮助大家更好的选择Kafka版本

5.0 架构说明

  1. Producer : 消息生产者,就是向 Kafka发送数据 ;

  2. Consumer : 消息消费者,从 Kafka broker 取消息的客户端;

  3. Consumer Group (CG): 消费者组,由多个 consumer 组成。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

  4. Broker :经纪人 一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。

  5. Topic : 话题,可以理解为一个队列, 生产者和消费者面向的都是一个 topic;

  6. Partition: 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;如果一个topic中的partition有5个,那么topic的并发度为5.

  7. Replica: 副本(Replication),为保证集群中的某个节点发生故障时, 该节点上的 partition 数据不丢失,且 Kafka仍然能够继续工作, Kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。

  8. Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。

  9. Follower: 每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。 leader 发生故障时,某个 Follower 会成为新的 leader。

  10. Offset:每个Consumer 消费的信息都会有自己的序号,我们称作当前队列的offset。即

    消费点位标识消费到的位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在牛逼的Android 高工,也要深入了解性能优化~

不管你是在大厂还是小厂,不管你开发能力有多么牛逼,不管你参与开发过什么出名APP,性能优化这一关你必定是要过的,而在性能优化之中最重要的一环还得是启动优化。 因为启动速度直接决定了用户使用该 App的留存率和转化率&#xf…

web前端设计与开发期末作品 旅游咨询网站 HTML5期末大作业 HTML+CSS旅游社网站5个页面 关于制作网页主题论述

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

[附源码]java毕业设计亿上汽车在线销售管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

jersey跨域文件上传

1.1、添加upload文件夹 在webapps\Root文件夹下创建用于接收上传文件的upload文件夹 创建upload文件夹 1.2、修改conf\web.xml设置允许上传文件 <init-param> <param-name>readonly</param-name> <param-value>false</par…

PyTorch深度学习中卷积神经网络(CNN)的讲解及图像处理实战(超详细 附源码)

需要源码和图片集请点赞关注收藏后评论区留言私信~~~ 一、卷积神经网络简介 卷积神经网络是深度学习中最常用的一种网络结构&#xff0c;它作为一种深度神经网络结构&#xff0c;擅长处理图像相关的问题&#xff0c;能够将目标图像降维并提取特征&#xff0c;以进行分类识别等…

数据结构与算法基础(王卓)(1)

标准答案&#xff1a;&#xff08;来源自数据结构与算法基础&#xff08;青岛大学——王卓&#xff09; note_Tarench的博客-CSDN博客&#xff09; #include <iostream> using namespace std;typedef struct {float realpart; //实部float imagpart; //虚部 }Complex;…

idea快速搭建struts2框架

一.用maven创建一个javaweb项目&#xff1a; pom.xml内容&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!--Licensed to the Apache Software Foundation (ASF) under oneor more contributor license agreements. See the NOTICE fi…

SpringCloud之入门

目录 一、简介 微服务架构介绍 微服务架构的常见问题 二、微服务架构拆分代码实现 微服务环境搭建 案列准备 微服务调用 实现步骤 创建一个父工程 创建成功spcloud-shop的pom依赖 创建基础模块 基础模块 shop-common pom依赖 创建用户微服务 shop-user 源码 shop-use…

纵目科技冲刺科创板:拟募资20亿 小米君联同创是股东

雷递网 雷建平 11月24日纵目科技&#xff08;上海&#xff09;股份有限公司&#xff08;简称&#xff1a;“纵目科技”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。纵目科技计划募资20亿元&#xff0c;其中&#xff0c;12.92亿元用于上海研发中心建设项目&#x…

HTML5期末大作业 基于HTML+CSS+JavaScript学校官网首页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园班级网页设计 | 我的班级网页 | 我的学校 | 校园社团 | 校园运动会 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 …

基于FME实现地铁路径规划

在建设智慧城市的背景下&#xff0c;智慧交通、智慧出行等建设在近几年日常生产、生活中占比逐渐加大。 路径规划是智慧交通、智慧出行建设过程当中较重要的专题分类。不管是百度、高德等公共服务平台&#xff0c;亦或是地方政府部门都在大力推动导航发展。路径规划作为数据导…

如何实现企业全链路协同,实现企业业绩增长

随着全球经济环境、贸易格局、产业结构的不断变化&#xff0c;持续冲击着各大企业供应链。在链路长、流程复杂的供应链体系中&#xff0c;由于“牛鞭效应”&#xff08;供应链上的一种需求变异放大现象&#xff09;的影响&#xff0c;需求单位、各级采购中心、供应商之间的信息…

【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

目录 一、项目介绍 二、项目结构 三、准备数据 1.数据标注 2.数据转换格式 四、执行训练 1.anchors文件 2.标签文件 3.预训练模型 4.训练数据 5.修改配置 6.执行训练 五、执行预测 1.检测图片 2.检测视频 3.heatmap 五、转换onnx 1.导出onnx文件 2.检测图片…

Linux中如何检测系统是否被入侵

Linux中如何检测系统是否被入侵&#xff0c;检查系统的异常文件 查看敏感目录&#xff0c;如/tmp目录下的文件&#xff0c;同时注意隐藏文件夹&#xff0c;以.为名的文件夹具有隐藏属性 > ls -al查找1天以内被访问过的文件 > find /opt -iname "*" -atime 1…

刘强东对京东零售动刀:提醒打工仔,要立新功不吃老本

雷递网 雷建平 11月24日在宣布下调京东高级管理人员的现金薪酬后&#xff0c;京东创始人刘强东又强势对京东零售管理人员进行动刀。此次调整中&#xff0c;时尚家居事业群负责人冯轶&#xff08;Carol&#xff09;、大商超全渠道事业群刘利振、平台业务中心负责人林琛成为此次调…

云原生大数据平台零信任网络安全实践技术稿

近年来星环科技围绕着数据安全做了大量的工作&#xff0c;形成了一个数据安全的产品体系。本文主要给大家介绍下星环数据云基于零信任安全理念在网络安全上的思考与实践。 首先对星环数据云产品的安全需求进行梳理和分类&#xff0c;大致可分为四类&#xff1a; ​ l 数据应用…

微软黑科技如何加速游戏开发,读这篇就够了

2022迈入尾声&#xff0c;游戏产业这场凛冽的寒风比想象中更为持久与刺骨。 一边是投入的缩减&#xff0c;一边是玩家攀升的要求。“既要又要还要”成为游戏制作人的高频句型。在紧预算与精制作的矛盾面前&#xff0c;游戏产业工业化的必要性再次被验证。如何把更多的精力投注…

通过PreparedStatement预防SQL注入

通过PreparedStatement预防SQL注入 简介&#xff1a;本文只讲PreparedStatement预防SQL注入的写法&#xff0c;大家学会就好。 推荐学习路线&#xff1a;JDBC数据库的连接->Connection&#xff08;数据库连接对象&#xff09;->Statement->ResultSet->通过Prepare…

【vim】系统剪切板、vim寄存器之间的复制粘贴操作命令?系统剪切板中的内容复制粘贴到命令行?vim文本中复制粘贴到命令行

一、系统剪切板和文本内容的复制粘贴 1.1 从系统剪切板复制粘贴到文本中 需要操作3次&#xff1a; 分别是英文双引号、一个加号或梅花号&#xff0c;最后是一个p 也即"p 或者直接使用组合键【Shift insert】 1.2 从文本复制粘贴到系统剪切板 也需要操作3次&#xff…

poi导入数据工具类,直接复制使用,有详细注释

poi导入工具类&#xff0c;直接复制使用&#xff0c;有详细的注释前言一、引入依赖二、封装的工具类以及注解类直接copy使用首先是工具类无需做操作然后是封装的两个注解类&#xff0c;也是直接复制使用测试工具类功能测试实体类Controller层调用执行结果如果ifNull 设置为true…