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

浅谈Kafka(一)

浅谈Kafka(一)

文章目录

    • 浅谈Kafka(一)
      • Kafa的设计是什么样的
      • 数据传输的事务定义
      • 消息队列的应用场景
      • Kafka怎么样判断节点是否存活
      • Kafka的消息是采用pull模式还是push模式
      • Kafka在磁盘上的消息格式
      • Kafka高效文件存储设计特点
      • Kafka与传统消息系统之间的区别
      • Kafka的分区数据怎样保存到磁盘
      • Kafka消费者如何消费消息
      • 消费者负载均衡策略
      • 数据有序
      • Kafka生产数据时数据的分组策略
      • Kafka生产数据时数据的分组策略

消息队列中间件就是用来存储消息的软件。举个例子来说,为了分析网站的用户行为,我们需要记录用户的访问日志。这些日志可以看成是一条条的消息,我们可以将它们保存到消息队列中。将来有一些应用程序需要处理这些日志,就可以虽是将这些日志取出来处理。

Kafa的设计是什么样的

  1. Kafka把消息以主题topic为单位进行归纳,把向发布消息的程序称为生产者producer,订阅主题并消费消息的程序称为消费者consumer。
  2. Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker。生产者通过网络把消息发送给Kafka集群,集群向消费者提供消息。

数据传输的事务定义

数据传输的事务定义通常有最多一次、至少一次、精确的一次三种。

  1. 最多一次是消息不会被重复发送,最多被传输一次,但也可能一次都不传输。
  2. 至少一次是消息不会被漏发,至少被传输一次,但也可能会被重复传输。
  3. 精确的一次是不会漏发也不会重复传输,每个消息都被传输一次。

消息队列的应用场景

  1. 异步处理,比如电商网站中,新用户注册时,需要将用户信息存储在数据库中,同时还需要额外发送注册的邮件通知,以及短信注册码给用户。但是因为发送邮件、发送短信注册码需要连接外部服务器,需要额外等待一段时间。此时,就可以使用消息对来来进行异步处理,从而实现快速响应。

  2. 应用解耦

  3. 流量削峰

  4. 日志处理

Kafka怎么样判断节点是否存活

  1. 节点必须可以维护和zookeeper的连接,zookeeper通过心跳检测机制检查每个节点的连接。
  2. 如果节点是follower,则必须能够及时同步leader的写操作,延迟不能太久。

Kafka的消息是采用pull模式还是push模式

  1. 消费者从broker拉取消息是pull模式,而broker把消息推送给消费者是push模式。Kafka采用的设计是生产者把消息推送到broker,消费者从broker拉取消息。
  2. 一些消息系统比如Apache Flume采用了push模式,把消息推送到下游的消费者。由broker决定消息推送的频率,对于不同消费速率的消费者就不太好处理了。消息系统都致力于让消费者以最大速率消费消息,但是push模式下,当broker的推送速率大于消费者的消费速率时,消费者可能要崩溃了,最终Kafka采取了pull模式。
  3. pull模式好处是消费者可以根据自己的消费能力决定是否批量的从broker拉取消息;缺点是如果broker没有可供消费的消息,会导致消费者不断在循环中轮询,直到新消息到达。Kafka可以通过设置参数让消费者阻塞直到新消息到达。

Kafka在磁盘上的消息格式

  1. 消息由一个固定长度的头部和可变长度的字节数组组成,头部包含了一个版本号和CRC32校验码。消息长度有4bytes,值为(1+4+n)。版本号占1byte,CRC校验码占4bytes,具体的消息占nbytes。

Kafka高效文件存储设计特点

  1. Kafka把topic中一个partition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完的文件,减少磁盘占用。
  2. 通过索引信息可以快速定位message和确定response的最大大小。
  3. 通过index元数据全部映射到memory,避免段文件的IO磁盘操作。
  4. 通过索引文件稀疏存储,可以降低index文件元数据占用空间大小。

Kafka与传统消息系统之间的区别

  1. Kafka持久化日志可以被重复读取和无限期留存。
  2. Kafka是一个分布式系统,以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性。
  3. Kafka支持实时的流式处理。

Kafka的分区数据怎样保存到磁盘

  1. 主题中的多个分区以文件夹的形式保存到broker,每个分区序号从0递增并且消息有序。分区文件夹下有多个段segment文件(.index,.log)。段文件里的大小和配置文件大小一致可以根据需要进行修改,默认为1g,如果大于1g,就会滚动一个新的段并且以上一个段最后一条消息的偏移量命名。

Kafka消费者如何消费消息

  1. 消费者每次消费数据时,记录消费的物理偏移量offset的位置,等到下次消费时,会接着上次位置继续消费。

消费者负载均衡策略

  1. 一个消费者组中的一个分片对应一个消费者成员,它能保证每个消费者成员都能访问,如果组中的成员太多会有空闲的成员。

数据有序

  1. 一个消费者组中的内部是有序的,消费者组和消费者组之间是无须的。

Kafka生产数据时数据的分组策略

数据有序

  1. 一个消费者组中的内部是有序的,消费者组和消费者组之间是无须的。

Kafka生产数据时数据的分组策略

  1. 生产者决定发送到集群的那个分区中,每条消息都是以键值对的格式。

相关文章:

浅谈Kafka(一)

浅谈Kafka(一) 文章目录 浅谈Kafka(一)Kafa的设计是什么样的数据传输的事务定义消息队列的应用场景Kafka怎么样判断节点是否存活Kafka的消息是采用pull模式还是push模式Kafka在磁盘上的消息格式Kafka高效文件存储设计特点Kafka与传…...

Redis7基础篇(八)

redis集群 是什么 能干吗 集群算法-分片-槽位slot redis集群的槽位slot redis集群的分片 分片和槽位的优势 槽位映射的解决方案 上面的三个方案分别对应了小厂 中厂 大厂 哈希槽取余分区 缺点 一致性哈希算法分区 小总结 哈希槽分区 经典面试题 这里说的redis是ap而不是cp的 …...

Tauri简介

在Tauri应用中,Rust和前端(通常是基于Web技术如React、Vue或Angular)之间的交互是一个核心特性,它允许开发者利用Rust的强大功能和性能,同时保持前端开发的灵活性和丰富的生态系统。这种交互主要通过Tauri提供的API桥接…...

JavaWeb——MVC架构模式

一、概述: MVC(Model View Controller)是软件工程中的一种 软件架构模式 ,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户…...

Excel求和方法之

一 SUM(),选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后,按下Alt键和键(即Alt)...

Windows Server 域控制服务器安装及相关使用

目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间,账户过期时间 5.软件分发 ​编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制,拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提:客…...

linux基础命令(超级详细)

Linux 系统提供了丰富的命令行工具,用于各种文件操作、系统管理和网络配置等任务。以下是一些常用的 Linux 基础命令: 一、 文件和目录操作 1. ls: 列出目录内容 ls 列出当前目录的文件和目录 ls -l 以长格式列出文件和目录,包…...

大模型笔记之-XTuner微调个人小助手认知

前言 使用XTuner 微调个人小助手认知 一、下载模型 #安装魔搭依赖包 pip install modelscope新建download.py内容如下 其中Shanghai_AI_Laboratory/internlm2-chat-1_8b是魔搭对应的模型ID cache_dir/home/aistudio/data/model’为指定下载到本地的目录 from modelscope im…...

用TensorFlow实现线性回归

说明 本文采用TensorFlow框架进行讲解,虽然之前的文章都采用mxnet,但是我发现tensorflow提供了免费的gpu可供使用,所以果断开始改为tensorflow,若要实现文章代码,可以使用colaboratory进行运行,当然&#…...

IT计算机软件系统类毕业论文结构指南:从标题到结论的全景视角

一、背景 在快速发展的IT和人工智能领域,毕业论文不仅是学术研究的重要成果,也展示了学生掌握新技术和应用的能力。随着大数据和智能系统的复杂性增加,毕业设计(毕设)的论文章节安排变得尤为关键。一个结构清晰、内容详…...

leetcode27:移除元素(正解)

移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&#xf…...

docker部署nginx--(部署静态文件和服务)

文档参考 1、http://testingpai.com/article/1649671014266 2、下载nginx docker pull nginx:alpine 然后启动nginx, docker run --rm -it -p 9192:80 nginx:alpine /bin/sh 关闭容器后,自动删除该容器 进入后,启动nginx, nginx进行curl h…...

websocket的介绍及springBoot集成示例

目录 一、什么是Websocket 二、Websocket特点 三、WebSocket与HTTP的区别 四、常见应用场景 五、SpringBoot集成WebSocket 1. 原生注解 2. Spring封装 一、什么是Websocket WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议,它可以让客户端和服务器…...

软件测试-自动化测试

自动化测试 测试人员编写自动化测试脚本,维护并解决自动化脚本问题 自动化的主要目的就是用来进行回归测试 回归测试 常见面试题 ⾃动化测试能够取代人工测试吗? ⾃动化测试不⼀定⽐人工测试更能保障系统的可靠性,⾃动化测试是测试⼈员手…...

Linux 安装TELEPORT堡垒机

一、查看官方文档 堡垒机官网地址:走向成功 - Teleport,高效易用的堡垒机 (一)官网资源链接 -》Teleport 在线文档 (二)手动下载安装包 二、压缩包下载和安装 (一)加压下载的安装…...

【14】即时编译器的中间表达形式

中间表达形式(IR) 编译器一般被分为前端和后端。 前端会对输入的程序进行词法分析、语法分析和语义分析,然后生成中间表达形式(IR);后端对IR进行优化,生成目标代码 不考虑解释执行的话&#xf…...

Mysql(三)---增删查改(基础)

文章目录 前言1.补充1.修改表名1.2.修改列名1.3.修改列类型1.4.增加新列1.5.删除指定列 2.CRUD3.新增(Create)3.1.单行插入3.2.指定列插入3.3.多行插入 4.数据库的约束4.1.约束的分类4.2.NULL约束4.3.Unique约束4.4.Default 默认值约束4.5.PRIMARY KEY:主键约束4.6.…...

Dialog实现原理分析

在 Android 中,对话框(Dialog)是一种非常常见的用户界面组件,用于向用户提供额外的信息或者请求用户的确认。Android 提供了几种不同类型的对话框,例如简单的消息对话框 (AlertDialog)、进度条对话框 (ProgressDialog)…...

21.1 基于Netty实现聊天

21.1 基于Netty实现聊天 一. 章节概述二. `Netty`介绍三. 阻塞与非阻塞1. 阻塞与非阻塞简介2. BIO同步阻塞3. NIO同步非阻塞4. AIO异步非阻塞IO5. 异步阻塞IO(用的极少)6. 总结四. Netty三种线程模型1. 单线程模型2. 多线程模型3. 主从线程模型五. 构建Netty服务器************…...

尼卡音乐 v1.0.5 — 全新推出的免费音乐听歌软件

尼卡音乐是一款全新推出的免费音乐听歌软件,无需注册登录,打开即拥有全部功能。聚合了六大音源曲库、歌单、排行榜,支持在线试听、无损下载以及高清MV播放。资源全、无广告、更新快,适合寻找高品质音乐体验的用户。 拿走的麻烦评…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...