开始学习 Kafka,一文掌握基本概念|Kafka 系列 一

news2025/1/16 15:05:56

如果你还不了解 Kafka,或者也打算深入探索、系统学习,那么欢迎有同样目标的小伙伴可以加群交流,让学习之路不再孤独。

一个人可能走的很快,但是一群人会走的更远。(后台回复:加群

点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达

为什么学习 Kafka

Kafka 在当下求职市场中可以说是应聘的必备条件之一,想要应聘高薪岗位,就需要熟练掌握这款优秀的消息引擎。

对于当下环境来说,各个公司尤其是互联网公司的数据量越来越大,需要存储和处理大量的数据,但是计算机的瞬时处理能力是有限的,这就需要一款消息引擎来帮助我们缓解流量激增的问题,平滑将数据传导到下游系统中。

消息引擎系统是一组规范:企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。

ec39e4fde907614b8e63b9f279dc885e.png

作为一款消息引擎,它主要有以下使用场景。

  • 异步处理:同步调用转换成异步消息通知,在消费者种实现对应的业务处理。比如在一个交易场景中,系统的调用链路很长,订单创建完成后需要检查商品的库存、扣库存、发短信、App 通知等功能,如果都放在一个接口同步调用,接口响应时间会变得很长。但是如果把这些逻辑都利用消息引擎做异步处理逻辑将变得很轻量级。

  • 应用解耦:减少应用直接的强依赖,利用消息队列通信,从而变成一种松耦合的结构。比如如果用户注册系统和红包系统利用接口同步通信,红包系统挂掉用户将无法注册,造成巨大损失。但是如果用户注册后发出一条注册消息,红包系统恢复后慢慢去消费,则可以解耦,提高系统的可用性。

  • 削峰填谷:利用消息中间件缓冲上游生产者大量流量,从而使消费者消费流量整体平滑。对于消息生产能力很强的上游系统,如果没有消息中间件的保护,下游系统可能会直接被压垮导致全链路服务雪崩。比如秒杀业务场景,上游业务发起下单请求,下游业务执行秒杀业务(库存检查,库存冻结,余额冻结,生成订单等等),下游业务处理的逻辑是相当复杂的,并发能力有限,如果上游服务不做限流策略,瞬时可能把下游服务压垮。针对此场景,我们可以利用 MQ 来做削峰填谷,让高峰流量填充低谷空闲资源,达到系统资源的合理利用。

综合以上场景,这就要求一款消息引擎需要具备高可靠、高性能的特点,Kafka 就满足这样的要求。

设计消息系统应该注意什么?

消息系统的不同成员之间需要利用消息进行信息的传递,这就涉及到两个重要的内容:

  1. 消息传递的格式是什么?

  2. 消息是如何传递的,协议是什么?

aaf20838b749307465c277d89f7d13ef.png

消息传递的格式选择有很多,比如 JSON、XML、Protobuf 等,对于 Kafka 来说,他使用的是纯二进制的字节序列,当然消息还是结构化的,只是在使用之前都要将其转换成二进制的字节序列。

消息系统中,有两种常用的传输协议,点对点模型和发布订阅模型。这两种协议,Kafka 都支持。

  1. 点对点模型:也叫消息队列模型。一个系统发送方发送的消息只能被指定接收方接收,其他任何系统都不能再读取 发送的消息。

5be501d7505f341c72bbad039f6bd82b.png
  1. 发布 / 订阅模型:有一个主题(Topic)的概念,发送方也称为发布者(Publisher),接收方称为订阅者(Subscriber)。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个,它们都能接收到相同主题的消息。举个例子,杂志订阅就是一种典型的发布 / 订阅模型,不同的居民可以订阅相同的杂志。

4748646e1abca207952e865ef5806829.png

Kafka 的基本概念和结构

生产者和消费者

学习 kafka 首先要明白其涉及的概念和术语,这是进入 Kafka 世界的门票。

作为一款消息系统,Kafka 提供了完整的消息发布和订阅解决方案。与其他消息系统一样,在这个系统中会有生产者和消费者以及 Topic 的角色。

  • 消息(Record):信息传递的载体。

  • 生产者(Producer):向一个或多个 Topic 发布消息的应用程序。

  • 消费者(Consumer):订阅一个或多个 Topic 接收消息的应用程序。

  • 主题(Topic):发布订阅的主题,同类型消息存储在同样的主题中,是一个逻辑上的划分,区分不同的业务。

消费者和生产者都是客户端(Clients),既然有客户端就有服务端。

Broker 服务端

服务实例(Broker):Kafka 的服务器端由被称为 Broker 的服务进程构成,一个 Kafka 集群由多个 Broker 组成。

Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。Broker 通常分散运行在不同的机器上,这样如果集群中某一台机器宕机,其他机器上的 Broker 也可以对外提供服务。这种多个 Broker 部署方式的方式保证了 Kafka 的高可用。44477980b4547311d354018547b9c243.png

分片和副本

分区or 分片(Partition):。kafka 将 一个Topic 中的消息分成多份,分别存储在不同的 Broker 里,这每一段消息被 kafka 称为 Partition。每个 Partition 都一个有序不变的消息序列,每个 Topic 下可以有多个 Partition。多个分片满足可扩展性和负载均衡。

fba48423ec41ab9700afce30dcc30225.png

为什么要有 Partition?因为一个 Topic 中的消息可能非常多,多到一台Broker存不下,因此需要拆分成多段存储在不同的机器里,并且这样做还能提高读写性能。

  • 副本(Replica):Kafka 中同一条消息能够被拷贝多份冗余存储,也就是副本。副本分为领导者副本(Leader Replica)和追随者副本(Follower Replica)。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。(默认分区副本数不得超过kafka节点数),多个副本满足高可用,副本数量越多,可靠性越高。

    • 领导者副本(Leader Replica):只有Leader能对客户端提供服务。生产者总是向领导者副本写消息,消费者总是从领导者副本读消息。

    • 追随者副本(Follower Replica):Follower 只能向领导者副本发送请求,请求领导者把最新生产的消息发给它,这样它能保持与领导者的同步,不对客户端提供服务。

位移

由于 Kafka 中的消息都是增量存储的,所以读取和消费消息都有一个位移的概念。

6efc02902036af021d1b96dceab98a79.png
  • 消息位移(Offset):表示 每个Partition中每条消息的位置信息,是一个单调递增且不会改变的值。

  • 消费者位移(Consumer Offset):表示消费者消费的进度,每个消费者都有自己的消费者位移。

  • 消费者组(Consumer Group):多个消费者实例共同组成的一个消费者组,同时消费多个分区以实现高吞吐量。

最后,欢迎大家提问和交流。

加入讨论群是升职加薪第一步!

回复:加群

d9bcc29f26cccc0dc365b89fd1e1200f.jpeg

点赞是一种美德,如对您有帮助,欢迎评论和分享,感谢阅读!

面试没有分库分表经验,那这篇不能错过!|金三银四系列

2023-06-26

6b9bc91594a60be32b34922dc07d8df8.jpeg

从二叉查找树到B*树,一文搞懂搜索树的演进!|原创

2023-05-23

fdebd04f7d0c6f10e7d5f0f2ad500688.jpeg

程序员,停止焦虑吧!|原创

2023-04-24

5115d091802039b7b210d0c4f2dea918.jpeg

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

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

相关文章

如何做好主机安全防护

当今数字化时代,网络安全威胁和风险日益突出,已成为企业面临的重大安全挑战。网络攻击者不断尝试利用各种技术和手段对企业网络资源进行探测和攻击,如:利用漏洞、木马、钓鱼、勒索等方式窃取数据、破坏系统、篡改信息。因此&#…

Semantic Kernel 入门系列:Semantic Function

如果把提示词也算作一种代码的话,那么语义技能所带来的将会是全新编程方式,自然语言编程。 通常情况下一段prompt就可以构成一个Semantic Function,如此这般简单,如果我们提前可以组织好一段段prompt的管理方式,甚至可…

软考论文如何得高分?

软考论文如何才能得高分?这是最近很多同事咨询我的问题,最近几天我也反思了一下为什么我的论文可以取得高分,对比了一下网络上45-55分的论文之后,总结如下: 1.子题目的要求一定要重点全面的回应 2. 要有过渡段-理论结…

如何分辨几类网线 如何制作网线的工作笔记

如何分辨几类网线 方法一. 可以通过查看网线的皮胶套上的数字进行判断 方法二. 1、六类网线和五类网线的内部结构不同,六类网线内部结构增加了十字骨架,将双绞线的四对线缆分别置于十字骨架的四个凹槽内,电缆中央的十字骨架随长度的变化而…

spark history网络流量占用高问题记录

生产环境遇到一台机器网络流量占用高告警 由于监控只有机器总的网络流量,没有具体进程的 于是只能登陆服务器,安装nethogs:yum install nethogs 然后执行nethogs命令查看进程流量 观察到主要是spark history server这个进程占用流量高(最高…

Kafka3.0.0版本——生产者如何提高吞吐量

目录 一、生产者提高吞吐量参数设置二、产者提高吞吐量代码示例 一、生产者提高吞吐量参数设置 batch.size:设置批次大小,默认16klinger.ms:设置等待时间,修改为5-100msbuffer.memory:设置缓冲区大小, 默认…

数字孪生电力:让电力智能化

随着科技的飞速发展,电力行业的智能化进程不断推进。智慧电力可以实现系统管理和能源分配的优化,实现电力行业的降本增效。以下主要介绍易知微科技有限公司为湖南国网建设的电力项目案例。 一、行业背景 1.1 政策背景 2014年12月获国务院常务会议原则通过…

抄写Linux源码(Day3:启动南大OS)

我们可以尝试启动南大OS,接着阅读南大OS源码,看看 JYY/YZH 构建主引导扇区的手段 (注意:我使用的是南大2023年的 OS 实验代码) https://jyywiki.cn/OS/2023/labs/Labs 首先,根据 JYY 的文档,…

jenkins gitlab多分支构建发布

内容背景介绍 这个是新手教程,普及概念为主 公司现在还使用单分支发布测试环境和生产,多人协同开发同一个项目导致测试环境占用等待等情况 测试环境占用等待问题 测试环境代码直接合并到 master,容易导致误发布到生产的情况 避免多版本同时发布测试不完善的情况出现 中间件…

汇川伺服驱动器整理

额定电压(V)功率(KW)额定输入电流(A)系数乘系数电流(A)推荐断路器电流(A)单相220V0.22.31.53.4540.441.5660.757.91.511.851619.61.514.4161.512.81.519.220三…

【100天精通python】Day24:python 迭代器,生成器,修饰器应用详解与示例

目录 专栏导读 1 迭代器,生成器,修饰器概述 1.1 概述 1.2 应用场景 2 语法与示例 2.1 迭代器 2.2 生成器 2.3 修饰器 3 综合应用案例 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 1 迭代器&a…

助力工业物联网,工业大数据之ST层的设计【二十五】

文章目录 04:ST层的设计05:服务域:工单主题分析06:服务域:工单主题实现 04:ST层的设计 目标:掌握ST层的设计 路径 step1:功能step2:来源step3:需求 实施 功…

HTML之表单标签

目录 表单标签 Form表单 定义: 基本语法结构: form属性: enctyoe属性 fieldeset标签 fieldeset属性 legend标签 label标签 优势 label属性 input标签 input属性 input标签中的type属性 text text输入框有以下配套属性 searc bu…

【Android】控件与布局入门 - 简易计算器

目录 1. 基础开发环境 2. 计算器的布局和相关按钮 3. 计算器的主要运算逻辑 4. APK 文件 5. 项目源码 1. 基础开发环境 JDK:JDK17 Android Studio:Android Studio Giraffe | 2022.3.1 Android SDK:Android API 34 Gradle: gradle-8.0-bi…

大屏可视化(VUE2 + DataV)

准备:安装vue脚手架(vue/cli),创建vue2项目,安装dataV,在main.js入口文件中引入dataV。 dataV地址:DataV 一、dataV安装 npm install jiaminghi/data-view 二、main.js import Vue from vu…

postgis mvt矢量切片 django drf mapboxgl

postgis mvt矢量切片 django drf mapboxgl 0.前提 [1] 静态的矢量切片可以采用 tippecanoe 生成,nginx代理,这种数据是不更新的; [2] 动态的矢量切片,一般采用postgis生成。基本上矢量切片80%的厂商都采用postgis,确实…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)七:工作台界面实现

一、本章内容 本章实现工作台界面相关内容,包括echart框架引入,mock框架引入等,实现工作台界面框架搭建,数据加载。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管理系统合集-工作台界面布局实现 五、…

大麦订单生成器 大麦一键生成订单

后台一键生成链接,独立后台管理 教程:修改数据库config/Conn.php 不会可以看源码里有教程 下载源码程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

上榜 Gartner | 中国领先的实时数据管理厂商 DolphinDB

在 Gartner 近日发布的 Hype Cycle for Data, Analytics and AI in China, 2023 报告中,DolphinDB 位列实时数据管理代表厂商。这是自去年 DolphinDB 入选 Gartner《中国数据库管理系统供应商甄选》后,又一次凭借领先的产品能力获得国际权威第三方分析机…

Python(五十九)字典的实现原理

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…