Kubernetes生产实践系列之十四:使用Jaeger和kafka构建健壮的APM系统的案例

Jaeger 分布式追踪系统模块分析   概述 APM(Application Performance Managerment)系统致力于监控和管理应用软件性能和可用性。通过检测和诊断复杂应用程序的性能问题。来保证软件应用程序的良好运行与预期的服务。            容器和Serverless编程方式的诞生极大提升了软件交付和部署的效率。APM系统为了应对这种变化趋势,诞生了一系列面向DevOps的诊断和分析系统。包括集中式... 阅读详情

一、前言

文章《Kubernetes生产实践系列之十三:在Kubernetes部署Jaeger并进行trace管理》介绍了使用Jaeger进行APM的基本架构和测试案例,并且提及了使用Kafka和ES构建更健壮和高能力的Jaeger APM系统的架构方案:

在文章《Fault Tolerance in Distributed Systems: Tracing with Apache Kafka and Jaeger》和文章《Distributed Tracing with Apache Kafka and Jaeger》中,作者demo了上述通过kafka进行Jaeger Span中转的方案,这个方案可以:

  • 减轻业务系统Span接入的压力
  • 增加系统健壮性
  • 提供跨kafka的服务之间的可跟踪性

转载自https://blog.youkuaiyun.com/cloudvtech
 

二、问题描述

在原生的Jaeger系统中,主要存在以下问题

  • 系统不支持、高频率Span的实时接入和存储(Jaeger client/agent是分布式的,但是Jaeger collector是存在接入能力瓶颈的)
  • 系统的缺乏健壮性,Jaeger Collector的失败会导致trace数据的丢失
  • 系统无法跟踪经由kafka结偶的微服务系统之间的调用关系

比如在案例中,服务调用关系如下:

通过kafka进行数据交互的系统

中间的stream-app、spring-consumer-app和consumer-app存在通过kafka topic进行信息交换的关系,但是在原生的jaeger系统中,生产方在数据经过kafka之后就无法通过trace id和数据消费放进行span连接,导致出现如下的业务系统trace碎片化的问题:

基于Kafka的业务系统的trace碎片化

转载自https://blog.youkuaiyun.com/cloudvtech
 

三、解决方案

3.1 使用kafka进行trace span的接入

kafka集群能够轻松的接入高频和大批量的span数据,并且进行短时间的中专,但是要达到这个目的,必须对Jaeger client进行修改,作为kafka topic的生产者注入span到指定的topic:

    @PostConstruct
    public void setClientSupplierForStreams() {
        streamsBuilderFactory.setClientSupplier(new TracingKafkaClientSupplier(tracer()));
    }
    KafkaProducer producer = new KafkaProducer(properties);
    return new TracingKafkaProducer(producer, tracer);

这样,Jaeger client将不会直接将数据发送到agent或者collector,而是先在kafka进行缓存。

3.2 将kafka中的span放入Jaeger系统

span进入kafka之后,需要指定topic数据的消费者处理这些数据,并发送给collector:

    KafkaConsumer consumer = new KafkaConsumer(properties);
    consumer.subscribe(Collections.singletonList(sentenceTopic));
    return new TracingKafkaConsumer(consumer, tracer);

到此为止,我们可以使用kafka作为中间buffer,近实时的接入高频次大批量数据。最后需要解决的问题是将被kafka数据交互分割的业务流程trace在Jaeger里面串联起来,这里就需要将trace id放入kafka进行传递。

3.3 使用kafka header补救kafka横断

将“关联信息”插入kafka业务消息header,业务系统在消费数据的时候就可以获取trace id并且在生成trace的时候加以引用:

    ProducerRecord producerRecord = new ProducerRecord(sentenceTopic, null, null, sentence, headers);

返回消息也需要携带id:

    HttpHeaders responseHeaders = new HttpHeaders();
    tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS, new HttpHeadersCarrier(responseHeaders));
    return new ResponseEntity(Integer.toString(randomNumber), responseHeaders, HttpStatus.OK);

转载自https://blog.youkuaiyun.com/cloudvtech 

四、测试

4.1 部署

获取代码:

https://github.com/burkaa01/jaeger-tracing-kafka-sender

启动系统:

docker-compose up -d

这个系统包括业务系统、Jaeger、Kafka、ES等:

同时为了便于查看,还部署了kibana系统:

docker-compose.yaml

version: "3.2"

services:
  kibana:
    image: kibana:6.5.0
    restart: always
    environment:
      ELASTICSEARCH_URL: "http://172.172.222.121:9200"
    ports:
       - "5601:5601"

4.2 注入数据

进入jaeger-tracing-kafka-sender,运行:

cd ./kafka-connect/file-source
curl -X POST -H "Content-Type: application/json" --data @file-source.json http://localhost:8083/connectors
curl http://localhost:8083/connectors

cd ../elastic-sink
curl -X POST -H "Content-Type: application/json" --data @elastic-sink.json http://localhost:8083/connectors
curl http://localhost:8083/connectors

4.3 查看结果

Jaeger UI的trace有8个span

Elastic Search里面的数据:

转载自https://blog.youkuaiyun.com/cloudvtech 

 

中间件技术全解析:从核心原理到高并发场景实战应用 在分布式系统与微服务架构中,中间件作为连接操作系统与应用软件的关键层,提供了通信、集成、数据管理等通用服务,是构建高可用、可扩展系统的技术基石。其核心原理在于通过抽象和标准化,将横跨多个应用的共性能力(如异步消息传递、数据缓存、安全认证)封装为可复用组件,从而让开发者能聚焦业务逻辑创新。这一设计带来了显著的技术价值:它实现了系统间的解耦,提升了开发效率,并保障了大规模分布式环境下的可靠性与性能。在应用场景上,中间件广泛应用于高并发请求处理、实时数据管道构建、服务治理与安全防护等领域。例如,Apache Ka 阅读详情

相关推荐

AI时代工程师转型:从代码实现到系统定义与AI驾驭的三重能力跃迁

在软件工程领域,初级开发岗位的工作内容正经历结构性重塑。传统上,工程师的核心价值体现在将需求翻译为功能性代码,其工作流程遵循“需求分析-编码实现-测试部署”的线性模式。然而,随着代码生成式AI工具的普及,这种以重复性、模式化编码为主的工作正被高效自动化。这促使工程师能力模型发生根本性转变,其价值锚点从“实现”迁移至更高维度的“定义”与“整合”。新的能力范式聚焦于三大方向:首先是复杂问题拆解与精准需求定义能力,工程师需成为业务目标与技术方案间的“翻译官”与“架构师”,产出精细化的任务说明书而非模糊意图。其次是

ctpaknc9526的博客 353

分布式调用链调研(pinpoint、skywalking、jaeger、zipkin等对比)

蝉之洞 5481

AgentScope 2.0深度解析:构建生产级多智能体应用的核心架构与实践

多智能体系统是人工智能领域的重要发展方向,它通过多个具备特定能力的智能体协同工作,以解决单一模型难以处理的复杂任务。其核心原理在于将复杂问题分解,并通过智能体间的通信与协作来完成。这种架构的技术价值在于提升了AI系统的模块化、可扩展性和任务处理能力,使其能够应用于客服自动化、内容创作、复杂决策等广泛场景。本文聚焦于生产级多智能体框架AgentScope 2.0,它通过分层架构、统一状态管理和原生支持可观测性与容错等特性,有效解决了智能体协作中的稳定性、可维护性与性能挑战,为开发者提供了从原型验证到线上部署的

weixin_30896825的博客 581

简述分布式链路追踪工具——Jaeger

Jaeger是受到 ​ ​Dapper​​​ 和 ​ ​OpenZipkin​​​ 启发的由 ​ ​Uber Technologies​​ 作为开源发布的分布式跟踪系统,兼容 OpenTracing 以及 Zipkin 追踪格式,目前已成为 CNCF 基金会的开源项目。其前端采用React语言实现,后端采用GO语言实现,适用于进行链路追踪,分布式跟踪消息传递,分布式事务监控、问题分析、服务依赖性分析、性能优化等场景。tracer:在广义上,一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。

Gefangenes的博客 3166

生产级机器学习服务的可观测性、弹性与治理实践

机器学习模型上线不是终点,而是工程化交付的起点。从数据输入校验、特征多级缓存与降级,到模型热加载、批处理预测与输出契约化,核心在于构建可监控、可容错、可治理的服务体系。可观测性覆盖数据漂移、特征健康与模型退化三层指标;弹性设计强调输入熔断、特征fallback与运行时模型切换;治理则通过Model Card、特征注册中心与OpenAPI门禁实现标准化约束。这些能力共同支撑ML服务在高并发、数据变异与业务迭代下的稳定交付。

weixin_34026276的博客 369

机器学习模型生产化:从Notebook到高可靠服务的四大断层与实战方案

机器学习模型部署不是简单封装API,而是跨越计算环境确定性、数据流脆弱性、资源边界模糊性和可观测性颗粒度不足四大核心断层的技术工程。其本质是将模型从‘能跑通’升级为具备稳定性、可观测性、资源韧性与灰度控制能力的生产级服务。关键技术价值在于支撑电商推荐、金融风控、智能客服等低延迟、高可用场景,并保障模型在GPU显存波动、上游数据延迟、环境微差等真实干扰下仍可持续输出可信预测。本文聚焦MLOps落地中最易被忽视的稳定性加固实践,涵盖环境指纹校验、数据新鲜度契约、GPU多级隔离与OpenTelemetry端到端追

congxian2511的博客 343

监控软件选型Zipkin jaeger elastic apm SkyWalking Pinpoint

Zipkin jaeger elastic apm SkyWalking Pinpoint 简介 Zipkin早于Jaeger,是Google Dapper的开源版本,由Twitter进一步开发。Zipkin基于Java语言的应用程序,其中包含很多服务,每个服务都实现Zipkin具体的某一个功能,并包括一个用户界面和用于跟踪软件系统框架的界面。每个服务还提供了一系列存储引擎来持久存储数据,例如内存数据库,MySQL,Cassandra和Elasticsearch。 Jaeger由Uber...

隐0士的博客 3821

Agent工程落地的七道硬坎:从执行引擎到沙盒安全

智能体(Agent)是大模型走向实际业务闭环的关键范式,其核心在于将LLM从‘生成器’升级为‘可调度、可追踪、可容错的数字员工’。它依赖执行引擎实现异步容错调度,依托工具编排保障语义唯一与输入契约,通过多Agent协作划分责任边界,并以可观测性体系支撑决策审计与指标监控。在真实生产中,‘hermes agent’‘langchain agent实战’等热词背后,本质是工程化能力的较量——包括RAG与Agent的动态知识编织、非管理员沙盒的安全权限控制,以及面向任务的对抗测试验证。本文聚焦Agent系统落地必

weixin_34239169的博客 529

APM性能监测工具skywalking——k8s从入门到高并发系列教程(十三)

为了找出响应速度慢,超时失败率高的接口,并定位出性能瓶颈的卡壳所在,我们需要一个apm性能监测工具。php是一个单进程的语言,性能卡壳主要就在于myql、redis、memcache等数据库操作以及curl等微服务调用过程,我们需要一个工具,能够帮助我们系统的看到整个接口的请求——响应过程,找出过程中的耗时点,有针对性的做出优化。

fanghailiang2016的博客 2097

502 Bad Gateway 排查实战:从网关到应用的四层定位法

在分布式系统和微服务架构中,HTTP 状态码是服务通信状态的关键指示器。502 Bad Gateway 作为 5xx 服务器错误家族的一员,其原理是网关或代理服务器(如 Nginx、负载均衡器)在将请求转发至上游应用服务时,未能收到有效响应。这一现象的技术价值在于,它不仅是简单的连接失败信号,更是揭示系统间通信链路健康状况的探针,常关联着服务雪崩、资源耗尽等深层隐患。其应用场景广泛覆盖了 Web 服务、API 网关、微服务调用链及云原生环境。当出现诸如 'Unexpected status 502 bad

weixin_30378623的博客 376

S32K144之芯片锁死解锁——进入HardFault

S32K144之芯片锁死解锁——进入HardFault 最近遇到因为软件代码问题导致进入HardFault,从而使芯片锁死,来简述具体现象以及最终的解锁方法。 导致原因:如下图,在进行Gpio的相关配置,case后面没有break语句,导致芯片进入HardFault。 现象1:reset引脚持续为低,reset指示灯常亮。如果掉电后重新上电,通过示波器抓取reset引脚的波形,会有510us左右或者29ms左右的低电平脉冲出现,一般会出现两三次左右并且没有规矩,持续几秒的高电平之后,reset脚再次被拉低

weixin_41935674的博客 8269

C++构建分布式语音识别系统:攻克小语种与高并发挑战

语音识别技术旨在将人类语音转换为计算机可读的文本,其核心原理涉及信号处理、声学建模与语言解码。在工程实践中,构建高可用、低延迟的识别服务是技术落地的关键,尤其在需要处理海量并发或资源稀缺语言的场景下。本文聚焦于如何运用C++与分布式架构解决小语种语音识别的独特难题,通过集成ONNX Runtime等推理引擎优化模型部署,并针对数据稀缺性进行模型适配与解码优化,最终实现了一套可弹性伸缩、支持多语种的高性能语音识别服务解决方案。

weixin_30608503的博客 303

CCC数字钥匙3.0标准解读(16)

介绍通信过程最重要部分:身份认证和加密.介绍需要身份认证的过程和需要加密的数据及过程.

weixin_41738640的博客 1531

API异常测试实战指南:从原理到工具,构建高可用服务

在分布式系统和微服务架构中,API作为服务间通信的核心枢纽,其健壮性直接决定了整个系统的稳定性。理解API异常处理的原理,是构建高可用服务的基础。异常测试的核心价值在于验证系统在依赖故障、网络波动、非法输入等非理想状态下的自愈能力和优雅降级水平,这远比常规功能测试更能暴露系统脆弱点。从技术实现层面,异常测试需要覆盖协议层、业务逻辑层和基础设施层,通过模拟身份认证失败(如401/403错误)、资源配额超限(如402/429状态码)、依赖服务超时(如connection refused、closed mid-r

weixin_34162228的博客 349

阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

本次比赛让自己在大数据的处理流程上有了更明确的认知,从数据清洗、特征工程、数据建模,每一个过程都能学到很多经验和知识,值得去历练。

weixin_46685991的博客 1万+

从INCA到Excel:手把手教你移植汽车标定数据的查表插值算法(附源码)

本文详细介绍了如何将汽车标定数据从INCA平台移植到Excel,实现查表插值算法的完整迁移。通过解析INCA MAP数据结构,设计Excel环境下的双线性插值算法,并提供VBA和C#两种实现方案,帮助工程师高效处理标定数据。文章包含实用代码示例和性能优化技巧,适用于ECU开发与标定场景。

weixin_29313239的博客 409

Structure Explorer:可视化探索复杂系统架构与依赖关系

在软件工程和系统架构领域,理解复杂系统的内部结构和依赖关系是进行高效开发、维护和故障排查的基础。其核心原理在于将系统的各个组件(如服务、模块、类、数据库表)及其间的交互关系抽象为图结构,通过节点和边进行建模。这种图模型的技术价值在于能够直观揭示系统的拓扑、耦合度、关键路径和潜在瓶颈,为架构治理、影响分析和性能优化提供数据支撑。应用场景广泛覆盖微服务架构梳理、遗留代码理解、依赖冲突排查以及系统变更影响评估等工程实践。本文聚焦的“Structure Explorer”正是基于这一理念,通过集成静态代码分析、运行

weixin_34221332的博客 322

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4228

TopoEvo:基于拓扑感知与自进化多智能体的微服务根因定位框架

在微服务架构中,服务故障的根因定位(RCA)是保障系统稳定性的核心挑战。其原理在于,微服务间复杂的调用依赖关系构成了动态拓扑网络,故障会沿此拓扑传播,使得传统基于规则或统计的方法难以快速精准定位源头。该技术的价值在于能显著降低平均诊断时间(MTTD),提升运维效率。其典型应用场景包括大规模分布式系统的智能运维(AIOps)和SRE工程实践。本文聚焦的TopoEvo框架,正是通过引入拓扑感知(Topology-Aware)和多智能体协同(Multi-Agent)机制,并结合自进化(Self-Evolving)

weixin_30411819的博客 320

FDTD Solutions-入射波长模式

经常在文献中看到仿真光源使用TM/TE模式,这个确定是十分必要的,决定了仿真结果。 但是也不能局限于选择TM/TE,因为不同领域、不同软件之间的使用习惯和命名可能不同。并且在现代光波导器件中,几乎全部 都是混合模式,或者称之为quasi-TE(准TE模式)和quasi-TM(准TM模式),多数情况下都简称为TE模式和TM模式。要知道 到底是TE模式还是TM模式,需要查看其电场的主分量(即振幅...

HECHUANWANG的博客 1万+

YOLOv11涨点改进 | 全网独家创新,损失函数改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

本文提出了一种改进YOLOv11模型的AdaFocalLoss损失函数,通过动态调节机制有效提升小目标检测性能。AdaFocalLoss融合了目标尺寸感知和IoU引导的自适应调节,解决了传统损失函数在小目标检测中的样本不平衡问题。该方法自动调整训练权重,无需手动调参,显著提升了模型在多尺度目标、复杂背景下的检测精度和训练稳定性。实验表明,AdaFocalLoss能更好地平衡不同尺度目标的梯度分布,改善边界完整性,减少误检漏检。文章详细介绍了算法原理、实现代码和在YOLOv11中的集成方法,为提升目标检测性能

Ai缝合怪、助力小伙伴高效发论文 335

机器学习模型生产化部署:从Notebook到高可用API服务

机器学习模型部署不是简单导出pkl文件并封装成API,而是涉及数据一致性、环境可重现性、服务可观测性等系统工程问题。其核心原理在于弥合开发与生产之间的三重失真——数据失真(如实时流字段变更)、环境失真(如Python/BLAS版本差异导致浮点偏差)、行为失真(如同步框架在高并发下的延迟抖动)。技术价值体现在保障低延迟(P99<200ms)、高可用(SLA 99.99%)与可灰度演进能力。典型应用场景包括金融风控实时评分、电商推荐在线预测等中等规模、低延迟要求的在线推理服务。本文聚焦FastAPI+Uvico

dezhen7015的博客 443

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

开发和测试主流技术栈速查指南

本文采用“主流/常见/适合”这类稳健表达,不写死容易过期的具体版本号。技术选型应结合团队经验、业务规模、合规要求、预算、现有系统和维护成本,不建议只按流行度决策。测试技术栈不应只覆盖 UI 自动化,应同时覆盖单元测试、接口测试、集成测试、契约测试、性能测试、安全测试、数据验证和可观测性。AI 编程助手适合提升效率,但生成代码、测试用例、SQL、正则、配置和安全策略必须经过人工复核。高风险场景包括认证授权、支付、权限、数据删除、数据库迁移、批量任务、消息补偿、生产配置和回滚策略。

KeepJoy的博客 433

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Boot高级特性实战:从自动装配到生产级应用部署

Spring Boot作为Java领域主流的微服务框架,其核心价值在于通过自动装配机制实现了约定大于配置的开发理念。理解其自动装配原理,掌握条件化装配与自定义Starter开发,是构建可复用组件和解决Bean冲突的关键。在生产环境中,配置管理、优雅停机和健康检查是保障应用稳定性的基础技术。面对大文件上传、分布式事务等复杂场景,需要结合流式处理与柔性事务方案来确保系统性能与数据一致性。本文聚焦Spring Boot高级应用,深入探讨自动装配、生产部署优化及分布式事务处理等核心实践,帮助开发者构建健壮高效的企业

weixin_34234829的博客 315

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Web接口开发的通用原则

接口的安全保护 1、如果接口提供多个参数,一定要对参数做适当的校验,避免某个参数不传时会导致接口致命的问题。 案例:查询订单详情的接口,查询条件没有传订单ID,导致查询了整个订单列表,多并发下导致数据库崩溃。无条件查询订单列表sql严重超时。 ...

MENGSONGSHAN的博客 353

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: Kubernetes生产实践系列之十三:在Kubernetes部署Jaeger并进行trace管理
下一篇: Kubernetes生产实践系列之十五:Kubernetes Ingress Nginx的架构和工作原理
cloudvtech
博客等级 码龄9年 533粉丝 111原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值