Kafka消息队列学习(一)

文章目录

  • 概述
  • 核心概念
    • 生产者
      • 示例
      • 同步 / 异步发送消息
      • 生产者参数配置
        • ack-确认机制
        • retries - 重试次数
        • compression_type - 消息压缩类型
    • 分区机制
      • 分区策略
    • 消费者
      • 消息有序性
      • 提交和偏移量
        • 偏移量提交方式
        • 手动提交
    • 高可用设计
  • SpringBoot集成Kafka
    • 基本使用
    • 传递对象消息

概述

在这里插入图片描述
在这里插入图片描述

核心概念

Kafka将生产者发布的消息发布到topic中,需要这些消息的消费者可以订阅这些主题。
下面这张图也为我们引出了,Kafka 比较重要的几个概念:

  • Producer(生产者) : 产生消息的一方。

  • Consumer(消费者) : 消费消息的一方。

  • Broker(代理 / 单个kafka实例):可以看作是一个独立的Kafka实例。

    • 多个Kafka Broker组成一个Kafka Cluster。
    • 每个 Broker 中又包含了 Topic 以及 Partition这两个重要的概念
  • Topic(主题) : Producer将消息发送到特定的主题,Consumer通过订阅特定的 Topic(主题) 来消费消息。

  • Partition(分区 / 队列) : Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker
    划重点:Kafka 中的 Partition(分区) 实际上可以对应成为消息队列中的队列。

  • 消费者组:同一个消费者组中,多个消费者订阅同一个topic,只有一个消费者可以接收到消息。

在这里插入图片描述

生产者

示例

在这里插入图片描述
在这里插入图片描述

同步 / 异步发送消息

在这里插入图片描述
在这里插入图片描述

生产者参数配置

ack-确认机制

在这里插入图片描述

retries - 重试次数

在这里插入图片描述

compression_type - 消息压缩类型

在这里插入图片描述

分区机制

在这里插入图片描述
kafka分区机制,允许消息存放在不同broke的不同分区上。
在这里插入图片描述

分区策略

默认是轮询。在这里插入图片描述

消费者

在这里插入图片描述
在这里插入图片描述

消息有序性

在这里插入图片描述
在这里插入图片描述
消息都发给同一个分区,就可以保证消息有序性。

提交和偏移量

消费者在消费消息时,可以追踪消息再分区的位置(偏移量),并自动向一个叫做_consumer_offset的特殊topic发送消息,包含了分区的偏移量。

在这里插入图片描述

如果消费者发送崩溃或者有新的消费者加入群组,会触发再平衡。例如消费者2挂掉了,那么分区3和分区4将被再平衡机制,指向到其他消费者。
在这里插入图片描述
在自动提交偏移量模式下,再平衡机制可能会引发问题,因为挂掉的消费者提交的消息偏移量与新指定的消费者正在处理的消息偏移量是不一致的。
提交偏移量小于正在处理的偏移量:
在这里插入图片描述
如果提交的偏移量小于正在处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息就会被重复处理。

提交偏移量大于正在处理的偏移量:
在这里插入图片描述
如果提交的偏移量大于正在处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息将会丢失。

偏移量提交方式

在这里插入图片描述

手动提交

首先将自动提交设置为false:
在这里插入图片描述

同步提交
使用 commitSync() 提交偏移量最简单也最可靠。这个 API 会提交由 poll() 方法返回的最新偏移量,提交成功后马上返回,如果提交失败就抛出异常。
在这里插入图片描述
commitSync() 将会提交由 poll() 返回的最新偏移量,所以在处理完所有记录后要确保调用了 commitSync(),否则还是会有丢失消息的风险。

如果发生了再均衡,从最近一批消息到发生再均衡之间的所有消息都将被重复处理。

同时在这个程序中,只要没有发生不可恢复的错误,commitSync() 方法会一直尝试直至提交成功。如果提交失败,我们也只能把异常记录到错误日志里。

异步提交
同步提交有一个不足之处,在 broker 对提交请求作出回应之前,应用程序会一直阻塞,这样会限制应用程序的吞吐量。我们可以通过降低提交频率来提升吞吐量,但如果发生了再均衡,会增加重复消息的数量。 这个时候可以使用异步提交 API。我们只管发送提交请求,无需等待 broker 的响应。
在这里插入图片描述
在成功提交或碰到无法恢复的错误之前,commitSync() 会一直重试,但是 commitAsync() 不会,这也是 commitAsync() 不好的一个地方。 它之所以不进行重试,是因为在它收到服务器响应的时候,可能有一个更大的偏移量已经提交成功。假设我们发出一个请求用于提交偏移量 2000,这个时候发生了短暂的通信问题,服务器收不到请求,自然也不会作出任何响应。与此同时,我们处理了另外一批消息,并成功提交了偏移量 3000。如果 commitAsync() 重新尝试提交偏移量 2000,它有可能在偏移量 3000 之后提交成功。这个时候如果发生再均衡,就会出现重复消息。 commitAsync() 也支持回调,在 broker 作出响应时会执行回调。回调经常被用于记录提交错误或生成度量指标。如果要用它来进行重试,则一定要注意提交的顺序。

同步和异步混合提交
一般情况下,针对偶尔出现的提交失败,不进行重试不会有太大问题,因为如果提交失败是因为临时问题导致的,那么后续的提交总会有成功的。 但如果这是发生在关闭消费者或再均衡前的最后一次提交,就要确保能够提交成功。因此在这种情况下,我们应该考虑使用混合提交的方法:
在这里插入图片描述

高可用设计

  1. 集群方式(cluster),一个kafka集群由多个broke组成,一个broke宕机,其他机器上的broke依然可以对外服务。

在这里插入图片描述

  1. 备份机制(replication):kafka中为了保证消息的安全性,将信息进行了备份,并且定义了两类副本:
    • 领导者副本:生产者首先将消息发送到领导者副本进行备份,领导者副本只有一个。
    • 追随者副本 :领导者副本,将自己的消息与追随者副本进行同步。追随者副本可以有多个,且可以分为两类:
      • ISR(in - sync replica):需要同步复制保存的follower。
      • 普通: 与领导者副本之间是异步保存。
    • 当leader失效后,需要选出新的leader,选举原则如下:
      • 优先从ISR中选择,因为ISR中的消息数据是与leader同步的
      • 如果ISR列表中的follower都不行了,就只能从其他follow中选取。
      • 极端情况:所有副本都失效了,这时有两种方案:
        • 等待ISR中的一个活过来,选为leader,数据可靠,但是时间不确定。
        • 选择第一个活过来的副本为leader,不一定位ISR中的, 以最快速度恢复可用性,但是数据不一定完整。

在这里插入图片描述
在这里插入图片描述

SpringBoot集成Kafka

基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

传递对象消息

在这里插入图片描述

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

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

相关文章

HTTP之cookie基础学习

目录 Cookie 什么是Cookie Cookie分类 Cookie版本 Cookie工作原理 Cookie详解 创建cookie cookie编码 cookie过期时间选项 Cookie流程 Cookie使用 会话管理 个性化信息 记录用户的行为 Cookie属性 domain选项 path选项 secure选项 cookie…

香港大学余涛组推出开源XLANG Agent!支持三种Agent模式

作者 |小戏、ZenMoore 一个新的未来又逐渐开始从理论走向现实走到我们身边了。 语言的意义在于使用,而从 ChatGPT 以来这些大规模语言模型的意义,也必然绝不止于 Chat,在四个月前,我们介绍了清华大学关于工具学习的综述《清华发布…

Python-OpenCV中的图像处理-图像特征

Python-OpenCV中的图像处理-图像特征 图像特征Harris角点检测亚像素级精度的角点检测Shi-Tomasi角点检测SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features) 图像特征 特征理解特征检测特征描述 Harris角点检测 cv2.cornerHarris(img, blockSize, ks…

海格里斯HEGERLS四向穿梭车仓储解决方案在电子商务行业中的应用

随着现代物流,尤其是智能化物流的飞速发展,河北沃克金属制品有限公司看到了智能物流领域背后的巨大价值和市场空间,深知物流与供应链对企业发展的重要性。于是,引进了先进的高科技智能技术—HEGERLS四向穿梭车技术,并迅…

自制手写机器人

写字机器人模拟在画图板上写字效果 写了一套写字机器人代码,有多种字体可供选择,需要的朋友私信获取代码和软件

Spring5学习笔记— 工厂高级特性

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Spring专栏 ✨特色专栏: M…

创建型模式-原型模式

文章目录 一、原型模式1. 概述2. 结构3. 实现4. 案例1.5 使用场景1.6 扩展(深克隆) 一、原型模式 1. 概述 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 2. 结构 原型模式包含如下角色: …

使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透,将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功 1. Linux(centos8…

【Vue-Router】路由入门

路由(Routing)是指确定网站或应用程序中特定页面的方式。在Web开发中,路由用于根据URL的不同部分来确定应用程序中应该显示哪个内容。 构建前端项目 npm init vuelatest //或者 npm init vitelatest安装依赖和路由 npm install npm instal…

ATF BL1 UFS初始化简单分析

ATF BL1 UFS初始化分析 1 ATF的下载链接2 ATF BL1 UFS 初始化简易流程图3 ATF BL1 ufs初始化简单过程分析3.1 调用过程3.2 hikey960_ufs_init3.3 dw_ufs_init3.3 ufs_init 以海思hikey960为例来介绍,简单介绍在ATF BL1阶段的初始化处理。 1 ATF的下载链接 https:/…

蓝帽杯 取证2022

网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php(CodeI…

截止到目前全量主体总数有多少?

企业主体类型 企业主体类型有很多种,一般我们会分为公司(有限责任)、合伙企业、个人独资企业、个体经营户这些类别。 今天我们按照企业,个体,组织的分类方式来看各个主体的总数。 企业:统一社会信用代码…

ARTS 挑战打卡的第7天 --- Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音(Tips)

前言 (1)Windterm是一个非常优秀的终端神器。关于他的下载我就不多说了,网上很多。今天我就分享一个国内目前没有找到的这方面的资料——Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音。 将WindTerm设置成中文 &…

Unity zSpace 开发

文章目录 1.下载 zSpace 开发环境1.1 zCore Unity Package1.2 zView Unity Package 2. 导入工程3. 发布设置4.功能实现4.1 用触控笔来实现对模型的拖拽: 5. 后续更新 1.下载 zSpace 开发环境 官网地址 1.1 zCore Unity Package zSpace 开发核心必须 1.2 zView …

机器人CPP编程基础-05完结The End

非常不可思议……之前四篇博文竟然有超过100的阅读量…… 此文此部分终结,没有继续写下去的必要了。 插入一个分享: 编程基础不重要了,只要明确需求,借助AI工具就能完成一个项目。 当然也不是一次成功,工具使用也需要…

计算机视觉一 —— 介绍与环境安装

傲不可长 欲不可纵 乐不可极 志不可满 一、介绍 研究理论和应用 - 研究如何使机器“看”的科学 - 让计算机具有人类视觉的所有功能 - 让计算机从图像中,提取有用的信息,并解释 - 重构人眼;重构视觉皮层;重构大脑剩余部分 计…

利用ChatGPT绘制思维导图——以新能源汽车竞品分析报告为例

随着人们对环境保护的日益关注和传统燃油汽车的限制,全球范围内对新能源汽车的需求不断增长。新能源汽车市场的激烈竞争使得了解各个竞品的特点和优劣成为关键。然而,针对这一领域的详尽竞品分析却常常需要大量时间和精力。 在此背景下,人工智…

Qt+C++自定义控件仪表盘动画仿真

程序示例精选 QtC自定义控件仪表盘动画仿真 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC自定义控件仪表盘动画仿真>>编写代码&#xff0c;代码整洁&#xff0c;规则&…

2023国赛数学建模D题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

PHP原生类

什么是php原生类 原生类就是php内置类&#xff0c;不用定义php自带的类&#xff0c;即不需要在当前脚本写出&#xff0c;但也可以实例化的类 我们可以通过脚本找一下php原生类 <?php $classes get_declared_classes(); foreach ($classes as $class) {$methods get_clas…