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

如果你还不了解 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.mzph.cn/news/20950.shtml

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

相关文章

python

文章目录 初识pythonpython的安装win系统Linux系统(centos7) 第一个Python程序常见问题 Python解释器Python开发环境PyCharm的基础使用创建项目修改主题修改默认字体和大小汉化插件翻译软件常用快捷键 初识python Python语言的起源可以追溯到1989年&…

Ubuntu-文件和目录相关命令

🔮linux的文件系统结构 ⛳目录结构及目录路径 🧩文件系统层次结构标准FHS Filesystem Hierarchy Standard(文件系统层次结构标准) Linux是开源的软件,各Linux发行机构都可以按照自己的需求对文件系统进行裁剪,所以众多…

17. Spring 事务

目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…

ffplay——QT项目移植

一、ffmpeg源码编译 参考: https://blog.csdn.net/sgzed/article/details/119850119 在生成时做了一些修改: ./configure --toolchainmsvc --enable-shared --enable-postproc --enable-gpl --prefixwindows 二、对文件做调整 ffplay只需要三个文件&…

stm32常见数据类型

stm32的数据类型的字节长度 s8 占用1个byte,数据范围 -2^7 到 (2^7-1) s16 占用2个byte,数据范围 -2^15 到 (2^15-1) s32 占用 4个byte,数据范围 -2^31 到 (231-1)231 2147483647 int64_t占用8个byte,数据范围 -2^63 到 (2^63-1)…

一文快速入门Byzer-python

目录 一、Byzer-Python介绍 二、Byzer-python工具语法糖 三、环境依赖 1. Python 环境搭建 2. Ray 环境搭建 3. Byzer-python 与 Ray 四、参数详解 五、数据处理 1. Byzer-python 处理数据 2. Byzer-python 代码说明 3. Byzer-python 读写 Excel 文件 4. Byzer-pytho…

如何搭建一个口才培训的网站?需要具备哪些条件?

论文题目:如何搭建一个口才培训的网站及所需条件 摘要: 本文探讨了如何搭建一个口才培训的网站,并详细分析了所需的关键条件。口才培训作为一种重要的社交技能,能够帮助人们提升自信和影响力,因此具有广阔的市场前景。…

day17 | 654.最大的二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

文章目录 一、最大的二叉树二、合并二叉树三、二叉搜索树中的搜索四、验证二叉搜索树 一、最大的二叉树 654.最大的二叉树 构建二叉树的题目,都用前序遍历。 因为我们一定要先构建根节点,才能继续向后构建。 递归函数的参数和返回值: Tree…

AssetBundle学习

官方文档:AssetBundle 工作流程 - Unity 手册 (unity3d.com) 之前写的博客:AssetBundle学习_zaizai1007的博客-CSDN博客 使用流程图: 1,指定资源的AssetBundle属性 (xxxa/xxx)这里xxxa会生成目录&…

redux-promise-middleware和applyMiddleware的理解与使用

一、作用: applyMiddleware是一个中间件,通常和applyMiddleware结合使用,是dispatch与reducers之间的应用,用于处理dispatch发送的异步action操作 二、使用 1、安装redux-promise-middleware cnpm i redux-promise-middleware…

Micropython STM32F4入门点灯第一课

Micropython STM32F4入门点灯第一课 📌固件刷可参考前面一篇《STM32刷Micropython固件参考指南》📍固件下载:https://micropython.org/download/?mcustm32f4🔖本例程基于STM32F4DISC,主控芯片STM32F407VGT6&#x1f4…

vue 混入(mixin)的使用

在 vue 组件内,如果想将一些公共功能,如组件、方法、钩子函数等复用,混入是一个很好的选择。 现在开始我们的混入使用吧 1、我们可以创建一个目录mixins,在创建一个comment.js文件如图: // 在 common.js 里写你想共享…

20230803激活手机realme GT Neo3

20230803激活手机realme GT Neo3 缘起: 新买的手机:realme GT Neo3 需要确认: 1、4K录像,时间不限制。 【以前的很多手机都是限制8/10/12/16分钟】 2、通话自动录音 3、定时开关机。 4、GPS记录轨迹不要拉直线:户外助…

小程序学习(四):WXML模板语法

WXML模板语法-数据绑定 1.数据绑定的基本原则 ①在data中定义数据 ②在WXML中使用数据 2.动态绑定属性 WXML模板语法-事件绑定 3.什么是事件 4.小程序中常用的事件 5.事件对象的属性列表 6.target和currentTarget的区别 7.bindtap的语法格式 8.在事件处理函数中为data中的数据…

DC-2靶机

文章目录 信息收集漏洞发现漏洞利用 DC-2介绍 DC-2环境下载 请注意,您需要将渗透测试设备上的 hosts 文件设置为: 192.168.0.145 dc-2 显然,将 192.168.0.145 替换为 DC-2 的实际 IP 地址。 它将使生活变得更加简单(如果没有它&am…

LeetCode513. 找树左下角的值

513. 找树左下角的值 文章目录 [513. 找树左下角的值](https://leetcode.cn/problems/find-bottom-left-tree-value/)一、题目二、题解方法一:递归法(层序遍历,深度优先搜索)**不足之处以及如何改进** 方法二:迭代 一、…

Gitignore忽略文件

默认情况下,Git会监视我们项目中的所有内容,但是有些内容比如mode_modules中的内容,我们不希望他被Git所管理。 我们可以在我们项目目录中添加一个 .gitignore 文件来设置那些需要git忽略的文件。

屏幕取色器Mac版_苹果屏幕取色工具_屏幕取色器工具

Sip for Mac 是Mac系统平台上的一款老牌的颜色拾取工具,是设计师和前端开发工作者必不可少的屏幕取色软件,你只需要用鼠标点一下即可轻松地对屏幕上的任何颜色进行采样和编码,并将颜色数据自动存到剪切板,方便随时粘贴出来。 Sip…

GPIO简介

一、GPIO GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能 LED实验步骤 实验步骤 以L…

Spring事务传播机制、实现方式、失效场景即原理

贴一篇源码分析的好文章:https://blog.csdn.net/qq_30905661/article/details/114400417 本质: 一个事务对应一个数据库连接。 通过 this 来调用某个带有 Transactional 注解的方法时,这个注解是失效的,可以看做这个方法&#x…