揭秘 ChunJun:如何实现 e2e&session 日志隔离

这篇具有很好参考价值的文章主要介绍了揭秘 ChunJun:如何实现 e2e&session 日志隔离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将从 e2e 的基本介绍,e2e 的使用与扩展,session 日志隔离三个维度为大家带来 ChunJun e2e & session 日志隔离的分享。

大量具体代码和演示请看视频教程⬇️

视频课程:

https://www.bilibili.com/video/BV1ru411P7oZ/?spm_id_from=333.999.0.0

课件获取:

https://www.dtstack.com/resources/1052?src=szsm

ChunJun 为何选择 e2e 测试

ChunJun 项目是基于 Flink 进行扩展,并开发了大量插件来支持数据同步和 SQL 执行,当前支持的数据源插件已经超过50个,所以如何保证各个插件的质量是 ChunJun 非常迫切的需求。以下是两种测试方式:

● 单元测试

· 目的:测试代码的单个部分(例如函数、方法或类)以确保它们按预期工作

· 速度:通常非常快,因为它们只测试小的代码片段,并且经常在隔离的环境中运行,不依赖外部资源

· 范围:覆盖范围有限,虽然单元测试可以高效得捕获代码的逻辑错误,但它们不能检测集成错误或复杂的交互问题

● 端到端测试(e2e测试)

· 目的:模拟真实场景来验证整个系统的行为,它从用户的角度测试应用程序,确保所有组件(前端、后端、数据库、其他服务等)一起工作

· 速度:相对较慢,因为它们经常需要启动整个应用程序,与真实的数据库或外部服务进行交互

· 范围:更全面地测试整个应用程序的工作流程,它们可以捕获在单元测试中可能被遗漏的错误,如集成问题、配置错误、网络问题等

使用单元测试,大量历史插件的单测补充,成本太大,且单测的质量以及范围等都很难把控。而 e2e 测试只需要编写各种插件的脚本并直接运行,并根据任务结果来判断对应插件的可用性,这是一种比较方便并且更加全面的测试方法,所以我们选择了增加 e2e 模块来验证各个插件。

e2e 的使用与扩展

e2e 使用-模块介绍

ChunJun-e2e 模块如下图所示:

揭秘 ChunJun:如何实现 e2e&session 日志隔离

e2e 模块主要分为3部分:

· containers 模块:基于 TestContainer 扩展的各个数据源 container

· test 模块:e2e 测试的各个插件入口

· resources 里的 docker 模块: 各个数据源的 DockFile

ChunJun-e2e 模块整合了 ChunJun-client 模块,主要是借助 TestContainer 在 Docker 环境中启动 Flink 的 standlone 环境以及各个数据源。因此只需要编写需要测试的 json 文件之后,通过 ChunJun-client 模块快速提交任务到 standalone 集群中进行任务的运行,并根据任务运行结果等信息来判断任务是否通过。

当前 ChunJun-e2e 模块已经支持了 MySQL、PgSQL、Oracle、FTP、EMQX 的测试,后续社区会持续性的补充 e2e 测试的插件。

e2e 使用-代码分析

● ChunJunFlinkStandaloneTestEnvironment

· 内部封装了一个 Flink 环境

· 提交任务和等待任务结束的方法

内置的 flinkStandaloneContainer 即为任务运行时所在的 flink standlone 集群。

揭秘 ChunJun:如何实现 e2e&session 日志隔离

● 对 stream 插件的测试用例

test 方法里只需要 submitSyncJobOnStandLone 提交 json 脚本到 Flink 的 stabdlone 集群里,通过 waitUntilJobFinished 获取任务结果并进行判断。

揭秘 ChunJun:如何实现 e2e&session 日志隔离

e2e 使用-贡献 e2e 插件

贡献贡献 e2e 插件的简单流程:

· 编写所需数据源的 DockerFile 文件

· 基于 TestContainer 和第一步的 DockerFile 创建对应的数据源 container

· 编写插件任务 json 脚本

· 继承 ChunjunFlinkStandaloneTestEnvironment,通过内置的提交方法提交任务即可

揭秘 ChunJun:如何实现 e2e&session 日志隔离

基于 TestContainer 进行扩展也是很简单的,只需要继承 GenericContainer 类,传递 DockerFile 文件路径即可,TestContainer 对于 JDBC 类型数据源提供了 JdbcDatabaseContainer 抽象类。

框架所需要的环境 提交等接口都已经在 ChunJunFlinkStandaloneTestEnvironment 提供了,只需要编写对应的数据源 DockerFile 和 json 脚本即可。

揭秘 ChunJun:如何实现 e2e&session 日志隔离

session 日志隔离

session 日志隔离-介绍

Flink on session 场景下,如果 TaskManager 不关闭,那么这个 TaskManager 里的所有任务都会写入同一个日志文件中,导致需要查看任务日志排查问题时,比较难查找到具体的每个任务日志。

如果 TaskManager 里的每个任务的日志都在不同的日志文件里,每个日志文件的名称就是 jobid,那么在查看任务日志时只需要查看 jobid 的日志文件即可。

为了解决这个问题,袋鼠云内部通过修改 Flink 源码以及 Log4j 的扩展,实现了 Flink on session 场景下,TaskManager 里每个任务的日志会写入对应的 jobid 日志文件里。

揭秘 ChunJun:如何实现 e2e&session 日志隔离

Flink 源码改动

TaskExecutor 在接受到任务之后,会转为 Task 对象。Task 对象是一个 Runnable 实现,内部持有一个线程,然后通过其内部线程执行客户代码逻辑。

因此每个 Task 都由一个 Thread 对应,在 Task 整个生命周期里,其 Thread 和 Task 都是绑定的。因此在 Run 的时候,将 jobId 放入 ThreadLocal 里即可。

之后,我们需要在Flink 源码中的org.apache.flink.runtime.taskmanager.Task#run里加上 MDC.put("jobId", jobId.toString()); 即可。

父子线程场景下需要加上下述参数:

env.java.opts.taskmanager: "-DisThreadContextMapInheritable=true"
揭秘 ChunJun:如何实现 e2e&session 日志隔离

Log4j 扩展

Flink1.12 支持 Log4j2 进行日志输出,在日志隔离方案中通过扩展 Log4j2 的 AbstractOutputStreamAppender,实现了通过一个自定义的 appender 来完成日志输出。

自定义的 appender 可以根据 MDC 里的 jobid 输出到对应的日志文件,因此其扩展逻辑为根据 MDC 里的 jobid 是否为空。如果不为空,则输出到 jobid 对应的文件,否则就是默认的 taskmanager.log。

揭秘 ChunJun:如何实现 e2e&session 日志隔离

最终日志隔离方案流程如下:

· 修改 Flink 源码,增加 MDC.put("jobId", jobId.toString())

· 打包 Flink 源码,将 Flink-dist 替换开源的 Flink-dist

· 基于 Log4j2 扩展 appender,并打包后的 jar 放入 Flink 的 lib 目录下

· 修改 Flink conf 目录下的 log4j.properties 文件,将 RollingFileAppender 替换为自定义的扩展 apped 类即可

《数栈产品白皮书》:https://www.dtstack.com/resources/1004?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack文章来源地址https://www.toymoban.com/news/detail-709783.html

到了这里,关于揭秘 ChunJun:如何实现 e2e&session 日志隔离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【语音识别】WeNet:面向工业落地的E2E语音识别工具

    1、参考资料 wenet-e2e/wenet Mozilla DeepSpeech yeyupiaoling/PaddlePaddle-DeepSpeech 2、快速搭建WeNet平台 参考 WeNet中文文档 下载官方提供的预训练模型,并启动 docker 服务,加载模型,提供 websocket 协议的语音识别服务。 Note : 这里的 $PWD = \\\"/home/wenet/model\\\" 。 一定要保证 预训练模型文件 的存

    2024年02月06日
    浏览(46)
  • 探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)

    🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入

    2024年01月20日
    浏览(44)
  • [E2E Test] Python Behave Selenium 一文学会自动化测试

    本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。 项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium 1. 什么是E2E Test E2E即End-to-end,意思是从头到尾的系统功能测试。它通过编写自动化测试脚本,完全从用户的角度出发,验证系统功

    2024年02月09日
    浏览(39)
  • 高级的E2EE——交叉签名(区块链密码签名)(第一篇-SAS)

      如果你使用了上篇文章技术,在客户端中成功实现了端到端加密。那么恭喜你!这是真正值得骄傲的一步,也是值得庆祝的一步!但是,您可能已经注意到,有些事情仍处于粗糙边缘:您必须通过比较公钥来手动验证所有其他设备,解密密钥不会在您的设备之间共享等。如

    2024年01月19日
    浏览(44)
  • 【测试与自动化】介绍-框架-Jest-覆盖率-异步代码-e2e-Vue测试

    了解什么是软件测试,以及自动化方式的测试 什么是软件测试? 定义: 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 目的: 促进目标鉴定软件的正确性、完整性、安全性和质量。 本质: 其实是对软件的

    2024年02月16日
    浏览(34)
  • 技术干货|如何利用 ChunJun 实现数据实时同步?

    实时同步是 ChunJun 的⼀个重要特性,指在数据同步过程中,数据源与⽬标系统之间的数据传输和更新⼏乎在同⼀时间进⾏。 在实时同步场景中我们更加关注源端,当源系统中的数据发⽣变化时,这些变化会⽴即传输并应⽤到⽬标系统,以保证两个系统中的数据保持⼀致。这个

    2023年04月24日
    浏览(52)
  • 技术干货|如何利用 ChunJun 实现数据离线同步?

    ChunJun 是⼀款稳定、易⽤、⾼效、批流⼀体的数据集成框架,基于计算引擎 Flink 实现多种异构数据源之间的数据同步与计算。ChunJun 可以把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从⽽为企业提供全⾯的数据共享,目前已在上千家公司部署且稳定运⾏

    2024年02月05日
    浏览(38)
  • 【0214】postgres后端进程session退出,如何通过日志分析其会话信息

    默认情况下,新建一个postgres后端进程会话(session),或是postgres进程正常/异常退出时,日志中没有很明显的记录用于说明postgres后端进程的会话状态信息。因为默认情况下, postgresql.conf 配置文件中两个配置选项: log_connections 和 log_disconnections 默认级别是 off 。

    2024年02月13日
    浏览(46)
  • 【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年01月16日
    浏览(48)
  • 揭秘华为研发代码大模型是如何实现的

    本文分享自华为云社区《风靡万千软件开发者:揭秘华为研发代码大模型是如何实现的?》,作者: DevAI 。 秉持“自己的降落伞,自己先跳”的原则,由公司装备部门牵头,携手华为云PaaS作为基础能力提供方,与公司各产品线共同研发面向产业的代码大模型。在研发过程中

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包