浅谈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. 生产者决定发送到集群的那个分区中,每条消息都是以键值对的格式。

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

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

相关文章

Yolov10网络详解与实战(附数据集)

文章目录 摘要模型详解模型实战训练COCO数据集下载数据集 COCO转yolo格式数据集(适用V4,V5,V6,V7,V8)配置yolov10环境训练断点训练测试 训练自定义数据集Labelme数据集格式转换训练测试 总结 摘要 模型详解…

CeresPCL 岭回归拟合(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 由于在使用最小二乘插值拟合时,会涉及到矩阵求逆的操作,但是如果这个矩阵接近于奇异时,那么拟合的结果就会与我们期望的结果存在较大差距,因此就有学者提出在最小二乘的误差函数中添加正则项,即: 这里我们也可…

OpenGL-ES 学习(8) ---- FBO

目录 FBO OverViewFBO 优点使用FBO的步骤 FBO OverView FBO(FrameBuffer Object) 指的是帧缓冲对象,实际上是一个可以添加缓冲区容器,可以为其添加纹理或者渲染缓冲区对象(RBO) FBO(FrameBuffer Object) 本身不能用于渲染,只有添加了纹理或者…

对派生类指针使用C风格的强制类型转换为基类指针

以下来自语言大模型的回答: 值可能发生改变 当对派生类指针使用C风格的强制类型转换成基类指针时,指针的值可能会发生改变。这主要是由于多重继承和虚继承的存在。以下是几个关键点解释: 单继承情况下: 在单继承的情况下,派生类指针转换为…

Stability AI发布了单目视频转4D模型的新AI模型:Stable Video 4D

开放生成式人工智能初创公司Stability AI在3月发布了Stable Video 3D,是一款可以根据图像中的物体生成出可旋转的3D模型视频工具。Stability AI在7月24日发布了新一代的Stable Video 4D,增添了赋予3D模移动作的功能。 Stable Video 4D能在约40秒内生成8…

数字乡村+智慧农业数字化转型大数据平台建设方案

1. 数字农业发展趋势 数字农业正经历全环节数字技术应用、全流程生产经营再造、全方位线上线下对接和管理服务全生命周期覆盖的四大趋势,标志着我国农业进入高质量发展新阶段。 2. 数字乡村的战略意义 数字乡村作为数字化、网络化和信息化的产物,对于…

Wemos D1 Mini pro/ nodeMcu / ESP8266 驱动 240*320 ILI9431 SPI液晶屏

Wemos D1 Mini / nodeMcu / ESP8266 驱动 240*320 ILI9431 SPI液晶屏 效果展示器件硬件连接引脚连接原理图引脚对照表 安装TFT_eSPI库TFT_eSPI库中User_Setup.h文件的参数修改User_Setup.h文件的位置User_Setup.h文件中需要修改的参数User_Setup.h完成源码 例程 缘起&#xff1…

PDF 转Word 开源库

1. Apache PDFBox Apache PDFBox 是一个开源的 Java 库&#xff0c;用于创建和操作 PDF 文档。虽然 PDFBox 本身没有直接支持 PDF 转 Word 的功能&#xff0c;但它可以提取 PDF 内容&#xff0c;你可以结合其他方法将这些内容写入 Word。 添加依赖 <dependency><gr…

网络间通信

1、udp通信 特点&#xff1a;&#xff08;1&#xff09;无连接 &#xff08;2&#xff09;不可靠 2、udp编程&#xff08;c/s模型&#xff09; ssize_t recvfrom(int sockfd, //socket的fd void *buf, //保存数据的一块空间的地址 …

高效分页策略:掌握 LIMIT 语句的正确使用方法与最佳实践

本文主要介绍limit 分页的弊端及线上应该怎么用 LIMIT M,N 平时经常见到使用 <limit m,n> 合适的 order by 来实现分页查询&#xff0c;这样做到底性能如何呢&#xff1f; 先来简单分析下&#xff0c;然后再实际验证一下。 无索引条件下&#xff0c;需要做大量的文件排…

Linux tail -f 报错 No space left on device

问题&#xff1a; 执行tail -f my_file 时报错&#xff1a;No space left on device df -h 检查磁盘剩余空间&#xff0c;剩余空间都很充足&#xff1b; df -i 检测iNode使用情况&#xff0c;剩余iNode也很充足&#xff1b; 参考这篇文章解决了问题 tail: cannot watch /v…

C++的正则表达式简介

文章目录 一、基本概念二、正则表达式的基本用法1、头文件2、正则表达式对象3、正则表达式匹配4、正则表达式语法&#xff08;1&#xff09;基本字符和元字符&#xff08;2&#xff09;字符类&#xff08;3&#xff09;预定义字符类&#xff08;4&#xff09;量词&#xff08;5…

Pandas数据清洗之数据分组和删除重复数据

数据分组 在Pandas中&#xff0c;你可以使用groupby()函数对DataFrame进行分组。这是一个非常强大的功能&#xff0c;可以基于一个或多个列的值来聚合数据。 这里是一个简单的例子来说明如何使用groupby()&#xff1a; 导入Pandas库: import pandas as pd创建一个示例DataFra…

vue3中的组件通信

props通信 可以实现父子组件通信&#xff0c;props数据还是只读的&#xff01;&#xff01;&#xff01; <template><div class"box"><h1>props:我是父组件曹操</h1><hr /><Child info"我是曹操" :money"money&qu…

Redis的缓存穿透、击穿、雪崩

目录 缓存穿透 定义&#xff1a; 解决方法&#xff1a; 缓存击穿 定义&#xff1a; 解决方案&#xff1a; 缓存雪崩 定义&#xff1a; 解决方案&#xff1a; 缓存穿透、缓存击穿和缓存雪崩的区别 缓存穿透 定义&#xff1a; 查询一个不存在的数据&#xff0c;数据库未…

探索802.1X:构筑安全网络的认证之盾

在现代网络安全的世界里&#xff0c;有一个极其重要但又常常被忽视的角色&#xff0c;它就是802.1x认证协议。这个协议可以被称作网络安全的守护者&#xff0c;为我们提供了强有力的防护。今天&#xff0c;我们就来深入探讨一下802.1x的原理、应用和测试&#xff0c;看看它是如…

[000-01-022].第09节:RabbitMQ中的消息分发策略

我的后端学习大纲 RabbitMQ学习大纲 1.不公平分发&#xff1a; 1.1.什么是不公平分发&#xff1a; 1.在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮训分发&#xff0c;但在某种场景下这种策略并不是很好&#xff0c;比方说有两个消费者在处理任务&#xff0c;其中有个…

卷积算子的介绍

在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;卷积算子&#xff08;或称为卷积核、滤波器&#xff09;是一个用于特征提取的重要工具。以下是对卷积算子及其用途的详细解释&#xff1a; 卷积算子是什么&#xff1f; 卷积算子是一个小矩阵&#xff08;通常为二维&…

js 实现对一个元素得拉伸

前言&#xff1a; 最近写一个项目遇到了需要拉伸调整一个元素得大小&#xff08;宽高&#xff09;。所以打算实现一下。 思路就是用 mousedown、mousemove、mouseup 来实现。 mousemove是动态获取坐标&#xff0c;然后 动态改变元素宽度 js自己实现&#xff1a; html里实现…

平衡编码与学习:程序员的自我提升之道

在这个快速迭代的编程世界里&#xff0c;程序员面临着双重挑战&#xff1a;一方面需要高效地完成日常编码任务&#xff0c;另一方面又必须不断学习新技术和深化专业知识以应对日益复杂的项目需求。如何在繁忙的工作和个人成长之间找到平衡点&#xff0c;是许多程序员共同面临的…