kafka中的常见问题处理

文章目录

  • 1. 如何防⽌消息丢失
  • 2. 如何防⽌重复消费
  • 3. 如何做到消息的顺序消费
  • 4. 如何解决消息积压问题
    • 4.1 消息积压问题的出现
    • 4.2 消息积压的解决⽅案
  • 5. 实现延时队列的效果
    • 5.1 应用场景
    • 5.2 具体方案

1. 如何防⽌消息丢失

  • ⽣产者:1)使⽤同步发送 2)把ack设成1或者all,并且设置同步的分区数>=2
  • 消费者:把⾃动提交改成⼿动提交

2. 如何防⽌重复消费

在防⽌消息丢失的⽅案中,如果⽣产者发送完消息后,因为⽹络抖动,没有收到ack,但实际上broker已经收到了。此时⽣产者会进⾏重试,于是broker就会收到多条相同的消息,⽽造成消费者的重复消费。

怎么解决

  • ⽣产者关闭重试:会造成丢消息(不建议)
  • 消费者解决⾮幂等性消费问题:
    所谓的幂等性:多次访问的结果是⼀样的。对于rest的请求(get(幂等)、post(⾮幂
    等)、put(幂等)、delete(幂等))
    解决⽅案
    1.在数据库中创建联合主键,防⽌相同的主键 创建出多条记录
    2.使⽤分布式锁,以业务id为锁。保证只有⼀条记录能够创建成功

在这里插入图片描述

3. 如何做到消息的顺序消费

  • ⽣产者:保证消息按顺序消费,且消息不丢失——使⽤同步的发送,ack设置成⾮0的值。
  • 消费者:主题只能设置⼀个分区,消费组中只能有⼀个消费者

kafka的顺序消费使⽤场景不多,因为牺牲掉了性能,但是⽐如rocketmq在这⼀块有专⻔的功能已设计好。

4. 如何解决消息积压问题

4.1 消息积压问题的出现

消息的消费者的消费速度远赶不上⽣产者的⽣产消息的速度,导致kafka中有⼤量的数据没有被消费。随着没有被消费的数据堆积越多,消费者寻址的性能会越来越差,最后导致整个kafka对外提供的服务的性能很差,从⽽造成其他服务也访问速度变慢,造成服务雪崩。

4.2 消息积压的解决⽅案

  • 在这个消费者中,使⽤多线程,充分利⽤机器的性能进⾏消费消息。
  • 通过业务的架构设计,提升业务层⾯消费的性能。
  • 创建多个消费组,多个消费者,部署到其他机器上,⼀起消费,提⾼消费者的消费速度
  • 创建⼀个消费者,该消费者在kafka另建⼀个主题,配上多个分区,多个分区再配上多个
    消费者。该消费者将poll下来的消息,不进⾏消费,直接转发到新建的主题上。此时,新
    的主题的多个分区的多个消费者就开始⼀起消费了。——不常⽤

5. 实现延时队列的效果

5.1 应用场景

订单创建后,超过30分钟没有⽀付,则需要取消订单,这种场景可以通过延时队列来实现

5.2 具体方案

在这里插入图片描述

  • kafka中创建创建相应的主题
  • 消费者消费该主题的消息(轮询)
  • 消费者消费消息时判断消息的创建时间和当前时间是否超过30分钟(前提是订单没⽀付)
    如果是:去数据库中修改订单状态为已取消。
    如果否:记录当前消息的offset,并不再继续消费之后的消息。等待1分钟后,再次向kafka拉取该offset及之后的消息,继续进⾏判断,以此反复。

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

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

相关文章

thinkphp 判断当前页 导航条高亮等方法

ACTION_NAME等表示全局变量,表示当前页面的操作方法 APP_NAME // 当前项目名称 MODULE_NAME //当前模块名称 ACTION_NAME // 当前操作名称 当然,也可以在控制器中,自己定义变量,比如 $this->assign(‘nav’, ‘cp’); 用法示例 <li <if condition" (ACTION_NA…

uniapp使用u-checkbox

当使用uni-app开发时&#xff0c;可以使用u-checkbox组件来实现复选框功能。以下是一个更详细的例子&#xff0c;展示如何在uni-app中使用u-checkbox组件&#xff0c;并介绍一些相关的API用法。 首先&#xff0c;确保已经安装并引入了u-checkbox组件。可以通过在页面的<tem…

NetApp EF 系列全闪存存储,为实时分析、HPC 和数据库等性能敏感型工作负载提供助力

NetApp EF 系列全闪存存储 如果您需要为实时分析、HPC 和数据库等性能敏感型工作负载提供强劲动力&#xff0c;NetApp EF 系列全闪存存储的性价比优势不言自明。其可为要求最苛刻的应用程序提供微秒级响应&#xff0c;最大限度地延长正常运行时间并提供 99.9999% 的可靠性。 为…

Maya 2024(3D建模、动画和渲染软件)

Maya 2024是一款非常强大的3D建模、动画和渲染软件&#xff0c;它提供了许多新功能和改进&#xff0c;以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面&#xff0c;Maya 2024引入了Symmetry&#xff08;对称&#xff09;功能&#xff0c;可以在网格两侧生成均匀…

学习笔记三十六:通过Ingress-nginx实现灰度发布

通过Ingress-nginx实现灰度发布 灰度发布原理将新版本灰度给部分用户切一定比例的流量给新版本 部署两个版本的服务以 nginx 为例&#xff0c;先部署一个 v1 版本:部署一个 v2 版本再创建一个 Ingress&#xff0c;对外暴露服务&#xff0c;指向 v1 版本的服务:访问验证 基于 He…

智能井盖位移报警器效果一览,感知井盖异常

井盖位移是指井盖在受到外力作用下产生的位置移动。这种现象通常发生在道路颠簸、车流量较大或地下管道受压较大的区域&#xff0c;当然也不排除会出现在一些角落内。当井盖发生位移或倾斜时&#xff0c;不仅会影响城市内道路的通行&#xff0c;还会给行人和车辆带来安全隐患。…

1056 Mice and Rice

题意&#xff1a;给定一组选手&#xff0c;按一定顺序将这些选手进行分组竞赛&#xff0c;每组的最大值为优胜者&#xff0c;进入下一轮分组再进行竞赛&#xff0c;直到选出最大值。然后输出每个选手的rank。 坑点&#xff1a;每个选手的rank为该轮竞赛选出的优胜者数1&#x…

web:catcat-new(文件包含漏洞、flask_session伪造)

前提知识 /etc/passwd 该文件储存了该Linux系统中所有用户的一些基本信息&#xff0c;只有root权限才可以修改。其具体格式为 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell&#xff08;以冒号作为分隔符&#xff09; /proc/self proc是一个伪文件系统…

【前缀和]LeetCode1862:向下取整数对和

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 …

Java之Stream的实用语法

1. 转Map List<Book> books bookMapper.list(); Map<String, Book> bookMap books.stream().collect(Collectors.toMap(Book::getBookId, book -> book));结果结构 {"1": {"bookId": "1","bookTitle": "书1&q…

2-redis高级-centos上安装redis(编译安装、redis启动)、redis客户端操作、redis使用场景、redis中的通用命令

1 centos上安装redis 1.1 编译安装 1.2 redis启动 2 redis客户端操作 3 redis使用场景 4 通用命令 1 centos上安装redis # win 上装redis # 上线--》centos装了--》详细研究 # docker 装---》配置--》持久化# 官网看看-redis源码 -----》自己编译-redis stack----》编译过后的…

LangChain的函数,工具和代理(二):LangChain的表达式语言(LCEL)

LangChain Expression Language (LCEL) 是 LangChain 工具包的重要补充&#xff0c;旨在提高文本处理任务的效率和灵活性。LCEL 允许用户采用声明式方法来组合链&#xff0c;便于进行流处理、批处理和异步任务。其模块化架构还允许轻松定制和修改链组件。LCEL 的优势之一是它使…

知识图谱最简单的demo实现——基于pyvis

1、前言 我们在上篇文章中介绍了知识图谱的简单实现&#xff0c;最后使用neo4j进行了展示&#xff0c;对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现&#xff0c;那么我们能不能直接将三元组画出来呢/ 接下来我们就介绍一个可视化的工具pyvis&#…

STM32/GD32_分散加载

Q&#xff1a;如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域&#xff1f; KEIL环境&#xff1a;.map后缀文件、.sct后缀文件 IAR环境&#xff1a;.map后缀文件、.icf后缀文件 【map文件】 对固件里面的变量、函数、常量等元素的存储空间进行分配的说明…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本&#xff1a;Static、Shared以及Dev Static --- 包含3个应用程序&#xff1a;ffmpeg.exe , ffplay.exe , ffprobe.exe&#xff0c;体积都很大&#xff0c;相关的DLL已经被编译到exe里面去…

Hadoop运行模式及目录结构

文章目录 Hadoop运行模式本地模式伪分布式模式完全分布式模式 Hadoop目录结构配置文件说明默认配置文件&#xff1a;自定义配置文件&#xff1a; Hadoop运行模式 本地模式 这种模式在一台单机上运行&#xff0c;没有分布式文件系统&#xff0c;而是直接读写本地操作系统的文件…

VS2022使用Vim按键

VS2022使用Vim按键 在插件管理里面搜索VsVim 点击安装&#xff0c;重启VS 工具->选项->VsVim 配置按键由谁处理&#xff0c;建议Ctrl C之类常用的使用VS处理&#xff0c;其它使用Vim处理

2024北京眼健康展,北京近视眼镜展,中国眼视光产品展览会

创中国眼康贸易平台&#xff0c;CEYEE中国眼博会创造2024年眼康产业发展的新动力&#xff1b; ——随着科技的不断发展&#xff0c;人们对于眼睛健康问题的重视程度也越来越高。在这样的背景下&#xff0c;2024第6届中国(北京)国际青少年眼健康产业展览会(CEYEE中国眼博会)将于…

golang WaitGroup的使用与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的WaitGroup的使用代码 package mainimport ("fmt""sync" )func main() {var wg sync.WaitGroupwg.Add(1)go func() {defer wg.Done()fmt.Println("xiaochuan")}()wg.Wait() }WaitGroup的基本使用场…

Day37| Leetcode 738. 单调递增的数字

今天就一个题目&#xff0c;做完吃完饭抓紧做六级试题。 Leetcode 738. 单调递增的数字 题目链接 738 单调递增的数字 本题目思路还是比较巧妙的&#xff0c;对于98&#xff0c;一旦出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;首…