Kafka是什么?为什么拥有异步、削峰、解耦?有哪些角色?

article/2025/10/7 5:51:17

一、Kafka是什么?

Kafka是一个分布式消息中间件,支持分区的、多副本的、多订阅者的、基于zookeeper协调的分布式消息系统。

通俗来说: kafka就是一个存储系统,存储的数据形式为“消息”;

它的主要作用类似于蓄水池,起到一个缓冲作用;

二、为什么拥有解耦、异步、削峰?

(1)解耦

传统模式:

 

传统模式的缺点:

  • 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

中间件模式:

中间件模式的的优点:

  • 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。

(2)异步

传统模式:

 

 

传统模式的缺点:

  • 一些非必要的业务逻辑以同步的方式运行,太耗费时间。

中间件模式:

 

 

中间件模式的的优点:

  • 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

(3)削峰

传统模式

 

传统模式的缺点:

  • 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

中间件模式:

中间件模式的的优点:

  • 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

三、Kafka中有哪些角色?

1、producer

消息生产者,就是向kafka broker 发消息的客户端。

2、consumer

consumer :消息消费者,从kafka broker 取消息的客户端。

consumer group:单个或多个consumer可以组成一个consumer group;这是 kafka 用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个Consumer Group。

 

3、topic

数据的逻辑分类;可以理解为数据库中“表”的概念;

(1)partition:topic中数据的具体管理单元;(可以理解为hbase中表的“region”概念)

         一个topic 可以划分为多个partition,分布到多个 broker上管理;

         每个partition由一个kafka broker服务器管理;

         partition 中的每条消息都会被分配一个递增的id(offset);

         每个 partition 是一个有序的队列,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。

         每个partition都可以有多个副本;

        分区对于 kafka 集群的好处是:实现topic数据的负载均衡。分区对于消费者来说,可以提高并发度,提高效率。

(2)broker

         一台 kafka 服务器就是一个 broker。

         一个kafka集群由多个 broker 组成。

         一个 broker 可以容纳多个 topic的多个partition。

 (3)offset

消息在底层存储中的索引位置,kafka底层的存储文件就是以文件中第一条消息的offset来命名的,通过offset可以快速定位到消息的具体存储位置;

4、Leader

partition replica中的一个角色,producer和consumer只跟leader交互(负责读写)。

5、副本Replica

partition的副本,保障partition的高可用(replica副本数目不能大于kafka broker节点的数目,否则报错。)

每个partition的所有副本中,必包括一个leader副本,其他的就是follower副本

6、Follower

partition replica中的一个角色,从leader中拉取复制数据(只负责备份)。

如果leader所在节点宕机,follower中会选举出新的leader;

7、偏移量Offset

每一条数据都有一个offset,是数据在该partition中的唯一标识(其实就是消息的索引号)。

各个consumer会保存其消费到的offset位置,这样下次可以从该offset位置开始继续消费;

consumer的消费offset保存在一个专门的topic(__consumer_offsets)中;(0.10.x版本以前是保存在zk中)

​​​​​​​8、消息Message

在客户端编程代码中,消息的类叫做 ProducerRecord; ConsumerRecord;

简单来说,kafka中的每个massage由一对key-value构成

 

各个字段的含义介绍如下:

  1. crc:占用4个字节,主要用于校验消息的内容;
  2. magic:这个占用1个字节,主要用于标识 Kafka 版本。Kafka 0.10.x magic默认值为1
  3. attributes:占用1个字节,这里面存储了消息压缩使用的编码以及Timestamp类型。目前Kafka 支持 gzip、snappy 以及 lz4(0.8.2引入) 三种压缩格式;后四位如果是 0001 则表示 gzip 压缩,如果是 0010 则是 snappy 压缩,如果是 0011 则是 lz4 压缩,如果是0000则表示没有使用压缩。第4个bit位如果为0,代表使用create time;如果为1代表append time;其余位(第5~8位)保留;
  4. key length:占用4个字节。主要标识 Key的内容的长度;
  5. key:占用 N个字节,存储的是 key 的具体内容;
  6. value length:占用4个字节。主要标识 value 的内容的长度;
  7. value:value即是消息的真实内容,在 Kafka 中这个也叫做payload。

http://chatgpt.dhexx.cn/article/G3Kkir4X.shtml

相关文章

科普:Kafka是啥?干嘛用的?

来源 | http://r6d.cn/bdjdi Kafka简介 Kafka概述: Kafka由 linked-in 开源 。 kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)。 Kafka是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可以在廉价的PC Ser…

Kafka 是什么?

前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 Kafka 的诞生背景…

kafka是什么?主要用在什么场景

1、kafka是什么? Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。2、产生背景 Kafka是一个消息系统,用作LinkedIn的活动流(Activity Stream&#…

kafka是什么?

一、定义 Apache Kafka 是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。 系统包括四个主要API: Producer API 允许一个应用推送流记录通过一个或多个Kafka topics ;Consumer API 允许一个应用订阅一个或多个…

Kafka分区机制介绍与示例

Kafka中可以将Topic从物理上划分成一个或多个分区(Partition),每个分区在物理上对应一个文件夹,以”topicName_partitionIndex”的命名方式命名,该文件夹下存储这个分区的所有消息(.log)和索引文件(.index)&#xff0c…

Kafka介绍

1. Kafka的基本介绍 1.1 什么是Kafka? Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访…

什么是Kafka?

1 kafka 是什么   Apache kafka is a distributed streaming platform,即官方定义 kafka 是一个分布式流式计算平台。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,即它是一个分布式消息队列,很少会使用 kafka 的流…

Linux 之软连接

1.创建软连接 创建文件及文件夹 创建一个软连接 创建的语法:ln -s是必须的,然后后面跟一个目标文件夹,最后是一个当前目录的软连接名。 删除软连接 错误示范: 正确删除: 删除软连接时,要注意软连接的路…

Linux下如何创建和取消软连接

建立软连接: ln -s /usr/nodejs/bin/npm /usr/local/bin/ ln -s /usr/nodejs/bin/node /usr/local/bin/ 删除软连接: rm -rf /usr/local/bin/node注意:取消软连接最后没有/,rm -rf 软连接。加上/是删除文件夹 可以看到&#xf…

ubuntu 软连接建立

程序报错 /bin/sh: 1: /usr/bin/c: not found/usr/bin 主要放置一些应用软体工具的必备执行档例如c、g、gcc,一些软件的运行脚本,在目录中确实没有看到c,g问题应该出在这里 g -v报错Unable to exec g.real: No such file or directory 解决:…

windows系统下创建软连接

Windows系统创建软连接 为c:\Users\hp\.Pycharm2017.3\system\ 创建index文件软连接,被连接文件为D:\”deep learning”\bak\index

创建软连接和硬链接

前言 硬链接的原理:使链接的两个文件共享同样的文件内容,也就是同样的 inode。 硬链接有一个缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接。但软链接可以指向文件或目录。 软链接的原理:就跟我们在windo…

软连接与硬链接

引入 1.硬链接与软连接 Linux 系统中有软链接和硬链接两种特殊的 "文件"2.inode是什么 ⛅要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西 ⛅当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inod…

Linux建立软链接、硬链接

软链接 说明:软链接仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效。 1.软链接,以路径的形式存在。类似于Windows操作系统中的快…

软连接和硬链接

好多人对软件链接,硬链接不清楚,今天给大家介绍一下 一、软链接(Soft Link) 1.释义 又被叫为符号链接(symbolic Link),它包含了到原文件的路径信息。 2.特性 (1)软链…

【DEBUG】phpstudy启动mysql服务时候发现3306端口被占用

点击phpstudy之后启动mysql,发现3306端口被占用。打开sqlectron发现并不是sqlectron占用了端口。在命令行中显示3306端口被占用,试图强行结束该进程,但是失败,原因是拒绝访问。 进入phpstudy的info界面需要用户名和密码&#xff0…

数据库安装处理提示3306端口被占用

数据库安装提示3306端口被占用怎么处理? 方法1: 1、windows命令窗口输入services.msc进入服务管理 2、查找mysql服务,右键停止,即可正常安装。 方法2: 1:进入cmd,查看计算机当前进程&#…

三步简单解决3306端口占用问题(windows)

一、查看占用3306端口的进程 其他端口参照3306netstat -aon|findstr 3306二、记住这个pid号 三、ctrl shiftesc调出任务管理器

解决mysql重装时,3306端口被占用(完整版)

解决方法: 1、打开终端,输入cmd,命令框内输入:netstat -ano 会显示如下图的内容,杀死3306对应端口的进程即可 2、杀死进程操作: taskkill /pid xxx -t -f xxx代表该端口的进程ID,也就是上图中pid一栏 …

查看3306端口被谁占用

今天安装mysql一直有问题,怀疑3306被谁占用了,排查开始: 一: 使用命令符netstat命令查看 netstat -a -n 显示各个端口占用: netstat -ano 显示各个端口占用和进程PID: 二: 使用netstat -aon|findstr "3306"命令查找"3306"端口信息 三: 使用tasklis…