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

【bug排查解决】现象级延迟8-10s

业务背景

最近公司在做物联网相关的项目,调试过程中发现好玩的bug。
首先一个数据采集场景,plc采集数据全链路:
kepServer(kepserver IOT gateway) -> emqx (查看日志)-> iot服务 -> 业务处理发送Kafka -> flink消费 -> websocket推送告警...
【整个链路还是比较长的】

整个过程是这样的,

  • kepServer。kepServer上配置设备需要采集的plc数据点位,kepServer自带的 IOT gateway,可以针对任意配置点位推送至EMQX服务器topic以及点位推送速率,为了调试配置了几个点位有虚拟点位和真实点位
  • EMQX。启动EMQX:MQTT服务器(业内比较常用的MQTT服务器)
  • IOT服务。 kepServer IOT配置点位数据发生变化后,将数据推送给EMQX,IOT服务监听对应topic解析组装数据直接将消息推送至Kafka
  • kafka。Kafka为所有类型数据的入口,所有类型数据统一推送至Kafka,如ModBus、MQTT、HttpApi…
  • Flink服务。Flink服务实时消费Kafka数据,根据IOT服务中配置与kepServer上对应的点位以及针对不同点位配置的告警模板,根据阈值或者状态等其他规则实时处理数据。
  • WebSocket。目前Flink集成WebSocket,根据阈值实时推送给前端,实时展示数据,如传感器温湿度、设备状态…

现象

调试真实点位

率先发现改变设备运行状态plc点位值,设备运行状态或者告警产生比较慢【延迟比较多】

分析

查看现有日志,初步分析发现消息生产到推送到Kafka有10s延迟

初步分析

  • kepserver 消息产生有时间
  • emqx可以配置日志级别为 debug,查看接受到消息的时间 延迟没问题
  • 发送Kafka之前的逻辑比较简单,不会有延迟

最终定位问题IOT接受消息有延迟,IOT框架内Listener监听消息有延迟 orz(初步定位,实际上是错的

后续,又将IOT监听MQTT消息初打日志,发送Kafka消息耗时时间打印。

对比多个关键节点时间,发现两个延迟点

  1. kepServer数据发生变化的时间和EMQX接收到kepServer推送的消息的时间对比:发现有个5-8s的延迟【kepServer->EMQX
  2. Kafka发送消息到成功回调:有个固定2s左右的延迟【Kafka

发现问题比解决问题更难,多打日志,好定位问题,养成习惯

最终解决

全链路排查

  1. kepServer

    • kepServer IOT gateway -> rate 速率设置,由10000 -> 1000

    • 这个参数改为1000之后呢(kepServer延迟得到解决),原本8-10s的延迟,变为了3s延迟左右

  2. kafka

    • 通过代码中各个关键节点打的日志,发现Kafka发消息到成功回调基本稳定在2s延迟左右,偶尔会有基本无延迟的情况(这种情况有点意思)

    • 各种查资料发现Kafka有如下几个与消息缓存区相关的参数

          kafka:...producer:batch-size: 16384 # kafka本地线程会去缓冲区中⼀次拉16k的数据,发送到brokerbuffer-memory: 33554432 # 消息缓冲区默认32m...properties:linger:ms: 10 # 默认 10ms
      

      如果线程拉不到16k的数据,间隔10ms也会将已拉到的数据发到broker

    原本这个时间参数刚好设置的就是2000ms,与上述刚好固定两秒延迟相符,偶尔有无延迟现象说明该消息刚发送就到了2s的频次直接就发生了无延迟

    • 该时间参数不设置或者设置小一些对延迟有明显的提升,但这样就会频繁发送消息增大网络开销,自行根据业务取舍
    • 整个默认10ms

所有都改完之后,基本延迟在1s左右,由于链路本身就比较长,这个时间还是可以接受的。yes

相关文章:

【bug排查解决】现象级延迟8-10s

业务背景 最近公司在做物联网相关的项目,调试过程中发现好玩的bug。 首先一个数据采集场景,plc采集数据全链路: kepServer(kepserver IOT gateway) -> emqx (查看日志)-> iot服务 -> 业…...

【人生感悟】不能对一个人太好是有心理学原理的

1、不能对一个人太好是有心理学原理的,当你长期友善对待一个人时,如果这个人认知程度不是很高,层次稍微的偏低,那他可能直接把你的友善理解为理所应当,甚至是你在讨好他,还会把你们之间的关系理解成他是高于…...

动态规划学习——最长回文子序列,让字符串变成回文串的最小插入次数

一,最长回文串 1.题目 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入&…...

CSS新手入门笔记整理:CSS列表样式

列表项符号:list-style-type 在HTML中,对于有序列表和无序列表的列表项符号,都是使用type属性来定义的。 语法 list-style-type:取值; list-style-type属性是针对ol或者ul元素的,而不是li元素。 有序列表属性 属性值 说明 …...

12月07日,每日信息差

以下是2023年12月07日的11条信息差 第一、社交媒体公司X计划在日本成立应用开发团队 第二、造车进程加快,小米汽车在多地招聘零售门店主管,零售门店主管工作地点涉及武汉、重庆、长沙、郑州、佛山、东莞、厦门等城市 第三、我国西南地区首座百万千瓦级…...

spring mvc理解

spring mvc M:model 模型 V:view 视图 C:controller 控制器 S: service 服务处理 D: Dao 数据持久化 视图 我理解就是web页面,帮助用户调用后端接口。 前后端分离之后,view似乎就和后端没什么关系了。 模型 格式…...

HTML-标签之文字排版、图片、链接、音视频

1、标签语法 HTML超文本标记语言——HyperText Markup Language 超文本是链接标记也叫标签,带尖括号的文本 2、HTML基本骨架 HTML基本骨架是网页模板 html:整个网页head:网页头部,存放给浏览器看的代码,例如CSSbody…...

圣诞将至—C语言圣诞树代码来啦

文章目录 圣诞将至—C实现语言圣诞树源码 圣诞将至—C实现语言圣诞树 圣诞树 源码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <math.h> #include <stdlib.h> #include <windows.h> #include <time.h> #define PI 3.14159265…...

Git常用命令#merge分支合并

要查看所有分支&#xff0c;包括本地和远程仓库的分支&#xff0c;可以使用以下命令&#xff1a; 1.查看分支 1.1 查看本地分支 git branch这个命令会列出本地所有的分支&#xff0c;当前所在的分支会有 * 标记。 1.2 查看远程分支 git branch -r这个命令会列出远程仓库的分…...

Windows server 2019 域环境部署

环境准备 准备3台服务器&#xff0c;配置都是8g2核&#xff0c;50g硬盘&#xff0c;操作系统版本Windows Server 2019 Datacenter 域服务器&#xff1a;adc&#xff0c;192.168.56.120服务器1&#xff1a;server1:&#xff0c;192.168.56.121服务器2&#xff1a;server2&…...

Cocos Creator加入图片没有被识别

原因&#xff0c;需要更换类型&#xff0c;选择下图中的类型...

java double类型保留两位小数并去除后面多余的0

public static void main(String[] args) {double value9.100001;//保留两位小数String format String.format("%.2f", value);//去除多余的0String strValue new BigDecimal(format).stripTrailingZeros().toPlainString();System.out.println("strValue &q…...

C++学习寄录(九.多态)

1.多态基本概念 先来看这样的代码&#xff0c;我的本意是想要输出“小猫在说话”&#xff0c;但实际输出的却是“动物在说话”。这是因为地址早绑定&#xff0c;在代码编译阶段就已经确定了函数地址&#xff1b;如果想要实现既定目标&#xff0c;那么这个dospeak&#xff08;&…...

【Linux基础开发工具】yum生态vim的配置与使用

目录 前言 1. Linux 软件包管理器 yum 1.1 什么是yum 1.2 快速上手yum 1.3 yum生态 2. Linux编辑器vim 2.1 vim的模式 2.2 vim使用技巧 3. vim编辑器辅助功能配置 3.1 配置 3.2 用户sudo权限配置 总结 前言 Linux基础指令与权限之后&#xff0c;Linux系统开发工具的使用…...

java-HashMap、TreeMap、LinkedHashMap、ArrayList、LinkedList使用笔记

背景 Map<String, Integer> unsortedMap new HashMap<>(); unsortedMap.put("One", 1); unsortedMap.put("Two", 2); unsortedMap.put("Three", 3); unsortedMap.put("Four", 4); 一、关于排序 TreeMap&#…...

Oracle中mybatis批量更新报错ORA-00933:SQL命令未正确结束

项目场景&#xff1a; 最近在开发项目的过程中遇见了这个问题&#xff1a;Oracle中批量更新的时候报错 ORA-00933&#xff1a;SQL命令未正确结束 问题描述 mybatis批量更新报错ORA-00933&#xff1a;SQL命令未正确结束 <foreach item"item" index"index&q…...

Mysql综合案例练习<1>

MySql综合案例练习<1> 题目一题目二题目三题目四题目五题目六题目七题目八题目九题目十题目十一题目十二题目十三题目十四题目十五题目十六题目十七题目十八题目十九 题目一 创建数据库test01_library 创建表 books&#xff0c;表结构如下&#xff1a; CREATE DATABASE …...

Linux系统编程:线程总结

线程的概念 基本概念 所谓线程&#xff0c;通俗的说就是一个正在运行的函数。 在Linux系统中&#xff0c;线程是程序运行的最小单位&#xff0c;也被视为进程内部的控制序列。同一进程下的多个线程共享进程的所有资源&#xff0c;包括进程环境变量、打开的文件描述符、信号量…...

activemq启动成功但web管理页面却无法访问

前提&#xff1a; 在linux启动activemq成功&#xff01;本地能ping通linux 处理方案&#xff1a; 确定防火墙是否关闭&#xff0c; 有两种处理方案&#xff1a;第一种-关闭防火墙&#xff1b;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…...

【Flink on k8s】- 0 - Flink kubernetes operator 快速入门与实战

完整的课程,请点击链接。 目录 一、你将收获 二、适用人群 三、课程介绍...

深度学习在甲状腺细胞病理诊断中的创新应用

1. 深度学习在甲状腺细胞病理学中的应用背景甲状腺癌是全球范围内最常见的内分泌系统恶性肿瘤之一&#xff0c;其发病率在过去几十年中持续上升。细针穿刺活检&#xff08;FNAB&#xff09;作为甲状腺结节诊断的金标准&#xff0c;其准确率直接影响后续治疗方案的选择。然而&am…...

SolidWorks二次开发踩坑记:Python调用SaveAs函数时,那些让人头疼的Errors和Warnings详解

SolidWorks二次开发实战&#xff1a;Python调用SaveAs函数时的错误码解析与解决方案 当你在深夜加班调试SolidWorks二次开发脚本时&#xff0c;SaveAs函数突然返回False&#xff0c;错误码像摩尔斯电码一样难以解读——这种经历恐怕每个工业软件开发者都深有体会。本文将深入剖…...

为OpenClaw智能体工作流配置Taotoken作为模型供应商的步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为OpenClaw智能体工作流配置Taotoken作为模型供应商的步骤 1. 准备工作&#xff1a;获取必要的凭证与信息 在开始配置之前&#x…...

3分钟告别浏览器Markdown阅读困境:这款扩展如何重塑你的技术文档体验

3分钟告别浏览器Markdown阅读困境&#xff1a;这款扩展如何重塑你的技术文档体验 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否曾面对浏览器中杂乱的Markdown源代码感到困…...

双机并联自适应虚拟阻抗下垂控制仿真模型附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

Seraphine终极指南:英雄联盟LCU API实战开发与智能BP系统深度解析

Seraphine终极指南&#xff1a;英雄联盟LCU API实战开发与智能BP系统深度解析 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟竞技环境中&#xff0c;数据驱动的决策能力往往决定了胜负的走向。Ser…...

NotebookLM笔记导出全链路实操指南:从Chrome插件绕过限制到API直连导出(含Python脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM笔记导出全链路概览 NotebookLM 是 Google 推出的基于用户上传文档构建个性化知识代理的 AI 工具&#xff0c;其核心价值在于语义理解与上下文生成&#xff0c;但原生不提供直接导出原始笔记…...

从零构建高性能技术博客:SSG选型、自动化部署与SEO优化实战

1. 项目概述&#xff1a;一个技术博客的诞生与演进“wangtunan/blog”&#xff0c;这看起来只是一个简单的GitHub仓库名&#xff0c;背后却是一个技术人持续输出、构建个人知识体系的完整实践。它不仅仅是一个存放Markdown文件的代码库&#xff0c;更是一个集成了现代前端技术栈…...

用Keras和MNIST数据集,5分钟搞定一个图像去噪的CNN自编码器(附完整代码)

5分钟实战&#xff1a;用Keras构建图像去噪自编码器的极简指南 当一张布满噪点的老照片在AI处理后重现清晰画面时&#xff0c;这种"数字魔法"背后往往是自编码器在发挥作用。作为深度学习领域的瑞士军刀&#xff0c;自编码器不仅能用于图像去噪&#xff0c;还在数据压…...

【稀缺首发】Midjourney达达主义风格提示工程白皮书:含89组对比实验数据+12个独家种子编号(限前500名下载)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;达达主义在AI图像生成中的哲学解构 达达主义并非技术流派&#xff0c;而是一场对逻辑、秩序与意义权威的激进质疑——这一精神正悄然渗透至当代AI图像生成的核心机制中。当Stable Diffusion接收“一只会…...