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

开始学习 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

相关文章:

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

如果你还不了解 Kafka,或者也打算深入探索、系统学习,那么欢迎有同样目标的小伙伴可以加群交流,让学习之路不再孤独。 一个人可能走的很快,但是一群人会走的更远。(后台回复:加群) 点击上方“后…...

Couldn‘t lock the file :/tmp/bbc-filesystem-base_syscache_service

解决方案: 进去带这个目录,然后切换成root用户,将它删除...

vscode 通过mongoose 连接mongodb atlas

了解mongodb 的项目结构 1.代表集群名称 > 2.代表数据库名称>3.代表每个 collection名称 三者范围为从大到小的关系 (一对多)。每个集群有不同的连接地址、用户信息(Database Access)、ip配置信息(Network Acce…...

记录 Vue3 + Ts 类型使用

阅读时长: 10 分钟 本文内容:记录在 Vue3 中使用 ts 时的各种写法. 类型大小写 vue3 ts 项目中,类型一会儿大写一会儿小写。 怎么区分与基础类型使用? String、string、Number、number、Boolean、boolean … 在 js 中, 以 string 与 String…...

主从同步带来的业务问题

目录 一: 目前的业务问题二:如何平衡主从不同步和业务隔离?三:解决方案 一: 目前的业务问题 业务A会跑一些规则, 跑完会把规则结果信息落地(落地到主库), 然后会通过TDM…...

主动带宽控制工具

停机和带宽过度使用是任何组织都无法避免的两个问题。随着企业采用 BYOD 文化,通过网络的流量负载可能很重,导致网络拥塞并使网络容易受到网络攻击。为了解决这个问题,企业需要全面的监控策略来保护网络,当看似大量的流量进入网络…...

数据采集的方法有哪些?

近年来,国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时,页面总会跳出我们想要搜索的相关产品或关联事物。大数据,似乎总是能够“算”出我们“心中所想”。那么,大…...

linux重新学习-纪录篇

前言: 正式学习linux的时候,除了那些命令之外,更多的是对于这个系统的重新认知。 linux的身世? 在上世纪90年代,那时候计算机非常的珍贵,配置也很一般般,系统也贵,所以没啥人用,在当…...

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能,还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后,专用于机器人的RT-2大模型于近期面世,它能让机器人学习互联网上的文本和图像,并具备逻辑推理能力。 该模型为机器人智能带来显著升级…...

JavaEE 面试常见问题

一、常见的 ORM 框架有哪些? 1.Mybatis Mybatis 是一种典型的半自动的 ORM 框架,所谓的半自动,是因为还需要手动的写 SQL 语句,再由框架根据 SQL 及 传入数据来组装为要执行的 SQL 。其优点为: 1. 因为由程序员…...

06 HTTP(下)

06 HTTP(下) 介绍服务器如何响应请求报文,并将该报文发送给浏览器端。介绍一些基础API,然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分,介绍stat、mmap、iovec、writev。 流程图部分,描…...

clickhouse调研报告2

由Distributed表发送分片数据 clickhouse分区目录合并 clickhouse副本协同流程 clickhouse索引查询逻辑 clickhouse一级索引生成逻辑(两主键) clickhouse的data目录下包含如下目录: [root@brfs-stress-01 201403_10_10_0]# ll /data01/clickhouse/data total 4 drwxr-x---…...

TensorRT学习笔记--基于TensorRT部署YoloV3, YoloV5和YoloV8

目录 1--完整项目 2--模型转换 3--编译项目 4--序列化模型 5--推理测试 1--完整项目 以下以 YoloV8 为例进行图片和视频的推理,完整项目地址如下:https://github.com/liujf69/TensorRT-Demo git clone https://github.com/liujf69/TensorRT-Demo.…...

原型链污染,nodejs逃逸例子

文章目录 原型链污染原型链污染原理原型链污染小例子 原型链污染题目解析第一题第二题 Nodejs沙箱逃逸方法一方法二 原型链污染 原型链污染原理 原型链 function test(){this.a test; } b new test;可以看到b在实例化为test对象以后,就可以输出test类中的属性a…...

nlohmann::json 中文乱码解决方案

// UTF8字符串转成GBK字符串 std::string U2G(const std::string& utf8) {int nwLen MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, NULL, 0);wchar_t* pwBuf new wchar_t[nwLen 1];//加1用于截断字符串 memset(pwBuf, 0, nwLen * 2 2);MultiByteToWideChar(CP_U…...

IDEA中maven项目失效,pom.xml文件橙色/橘色

IDEA中maven项目失效,pom.xml文件橙色/橘色 IDEA中Maven项目失效 IDEA中创建的maven项目中的文件夹都变成普通格式,pom.xml变成橙色 右键点击橙色的pom.xml文件,选择add as maven project maven项目开始重新导入相应依赖,恢复…...

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

IntelliJ IDEA 2023.2社区版插件汇总

参考插件帝:https://gitee.com/zhengqingya/java-developer-document 突发小技巧:使用插件时要注意插件的版本兼容性,并根据自己的实际需求选择合适的插件。同时,不要过度依赖插件,保持简洁和高效的开发环境才是最重要…...

Sheel编写关于mysqldump实现分库分表备份

编写脚本,使用mysqldump实现分库分表备份。 #编辑脚本文件 [rootlocalhost scripts]# vim bak_tb1.sh#脚本内容: #设置变量,减少代码冗余 mysql_cmd-uroot -p123 exclude_dbDatabase|information_schema|-S|mysql|performance_schema|sys ba…...

Rust的入门篇(上)

Rust的入门篇(上) 最近跟着菜鸟一起入门了比较火的Rust语言,下面整理一下学习的笔记吧。 1. Helloworld程序 fn main(){println!("hello rust") }2. 格式化字符串 fn main(){let a 12;// 格式化字符串println!("a{}", a);println!("a…...

数字滚动变化-指令形式

话不多说&#xff0c;直接上代码 <template><divv-data-scroll"{target: 100speed: 1000}">100</div> </template><script setup lang"ts"> import { DirectiveBinding } from vue;function dataScroll(el: HTMLElement, …...

LNMP搭建及论坛搭建

一、LNMP LNMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c; 能够提供动态Web站点服务及其应用开发环境。LNMP是一个缩写词&#xff0c;具体包括Linux操作系统、nginx网站服务器、MySQL数据库服务器、PHP&#xff08;或…...

小程序商品如何开启秒杀?

在小程序中&#xff0c;开启秒杀活动可以有效地吸引用户的注意力&#xff0c;提升销售额。下面就让我们来看看小程序商品怎么开启秒杀功能吧。 首先&#xff0c;确定秒杀活动的商品。一般来说&#xff0c;我们可以选择一些库存较多的商品或者是需要清理库存的商品作为秒杀商品…...

vue 标题文字字数过长超出部分用...代替 动态显示

效果: 浏览器最大化: 浏览器缩小: 代码: html: <div class"title overflow">{{item.name}}</div> <div class"content overflow">{{item.content}}</div> css: .overflow {/* 一定要加宽度 */width: 90%;/* 文字的大小 */he…...

DAY2,C高级(shell脚本的使用)

1.今日思维导图&#xff1b; 2.递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位&#xff1b; #include<my_head.h>void Output(int num) {if(num 0)return;Output(num/10);printf("%d ",num%10);}int main(int argc, const char *argv[]) {in…...

maven中的properties标签

在maven构建项目的时候经常遇到如下所示的标签配置&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId> <version>4.2.6</version></dependency><dependency><gr…...

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…...

软件测试环境讲解

在一个项目开发到发布的整个过程中&#xff0c;会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上&#xff0c;配置好以后&#xff0c;跑起来项目&#xff0c…...

mysql 面试

基础 详细说一下一条 MySQL 语句执行的步骤 Server 层按顺序执行 SQL 的步骤为&#xff1a; 客户端请求 -> 连接器&#xff08;验证用户身份&#xff0c;给予权限&#xff09; 查询缓存&#xff08;存在缓存则直接返回&#xff0c;不存在则执行后续操作&#xff09; 分析器…...

linux 安装FTP

检查是否已经安装 $] rpm -qa |grep vsftpd vsftpd-3.0.2-29.el7_9.x86_64出现 vsftpd 信息表示已经安装&#xff0c;无需再次安装 yum安装 $] yum -y install vsftpd此命令需要root执行或有sudo权限的账号执行 /etc/vsftpd 目录 ftpusers # 禁用账号列表 user_list # 账号列…...