2022年终总结
2022年最后一天,例行打开电脑,耳机里播放着蔡健雅的Letting go,我写下了这篇年终总结。 2022年,对于全世界而言,同样是被疫情肆虐的一年,对于中国而言,2022年是结束了三年疫情防控的转折点,没有了核酸检测,没有商场扫码,也没有了居家隔离,突然政策的放开让所有人都没有做好准备,而作为第一波中招的我也是经历了很难受很痛苦的抗疫时期,至今为止,办公室里还充斥着此起彼伏的咳嗽声,很不幸我也是其中的一员,疫情后时代的到来给整个国家带来了新的机遇,也带来了更多的挑战,2023年新冠病毒将彻底改名,退出历史舞台,这种感觉难以名状。 2022年对于我自身而言,是一个蜕变和成长的年头,技术方面我有了些长足的进步,在情感方面我也摆脱了前任对于我自身的束缚,过去2年半时间里我一直活在对于上段感情的愧疚之中无法抽身,每每想起过去的种种,我会很难过,每个人可能青春中都有各种各样的遗憾,无法弥补也无法回退,唯有随着时间长河的向前流动才能因为时间的流逝而慢慢消散,从各个渠道得知她过的很好,也证实了当时的观点:没有我她也能过得很好,而我没了她过的只能说一般,用行动证明了这个致命真理,两个人从相交线变成 ...
如何做一名Apache Release Manager
前言 近期,Apache SeaTunnel经过几个月的迭代和架构升级,终于迎来的v2的第一个正式版本2.3.0,我也有幸作为本次的Release Manager,体验了一把从0到1的Apache发版流程,不得不说Apache基金会在项目的版本管理这块有着完善的规范和严谨的流程,整个发版过程周期很长,其中也踩了不少的坑,俗话说好记性不如烂笔头,所以笔者写了一篇文章来记录整个过程(以Apache SeaTunnel为例),希望这篇文章能够让小白快速入门Apache项目版本管理和发布。 Tips: Release Manager需要有Apache LDAP账号,也就意味着你需要首先成为项目的Committer才有资格 环境准备 GIT 用于clone项目源代码到本地 GPG 用于生成数字签名,为你的每一次操作留下痕迹 SHASUM 用于为文件生成签名 SVN 用于拉取Apache Release SVN仓库 MAVEN 用于编译项目 物料准备 配置GPG KEY 新建key 1gpg --gen-key 123456789101112131415161718192021 ...
我与Apache SeaTunnel的不二情缘
关于我 我是tyrantlucifer,目前是Apache SeaTunnel社区的PPMC & Committer,在一家不知名公司任职大数据开发工程师,工作方向主要聚焦于数据集成领域的探索和实践,平时也会用诸如Spark、Flink这样的分布式计算引擎做一些业务数据处理的工作,我是一名纯粹的开源爱好者,喜好用爱发电,热爱写代码,今天很高兴能够再次受到社区邀请,在这里讲述我与Apache SeaTunnel的故事。 初识WaterDrop 熟悉SeaTunnel的老朋友们应该会知道,其实SeaTunnel没进孵化器之前就是市面上开源许久的WaterDrop,在SeaTunnel进孵化器的前期,我有幸因为工作缘故,接触到了WaterDrop,由此开启了我与SeaTunnel的不解情缘。 当时我在公司内部负责维护公司自己的数据集成引擎,但由于技术选型和当前业务的不匹配,导致数据传输效率过慢,引擎已经满足不了离线需求的日益增长,为了解决这个痛点,我去调研了WaterDrop,并被它的设计思路和架构深深吸引,并将它成功集成到了公司的数据集成引擎之上。 参与SeaTunnel贡献 在我 ...
SeaTunnel连接器V1到V2的架构演进与探究
核心概念 整个SeaTunnel设计的核心是利用设计模式中的控制翻转或者叫依赖注入,主要概括为以下两点: 上层不依赖底层,两者都依赖抽象 流程代码与业务逻辑应该分离 对于整个数据处理过程,大致可以分为以下几个流程:输入 -> 转换 -> 输出,对于更复杂的数据处理,实质上也是这几种行为的组合: 内核原理 SeaTunnel将数据处理的各种行为抽象成Plugin,并使用SPI技术进行动态注册,设计思路保证了框架的灵活扩展,在以上理论基础上,数据的转换与处理还需要做统一的抽象,譬如比较有名异构数据源同步工具DataX,也同样对数据单条记录做了统一抽象。 在SeaTunnel V1架构体系中,由于背靠Spark和Flink两大分布式计算框架,框架已经为我们做好了数据源抽象的工作,Flink的DataStream、Spark的DataFrame已经是对接入数据源的高度抽象,在此基础上我们只需要在插件中处理这些数据抽象即可,同时借助于Flink和Spark提供的SQL接口,还可以将每一次处理完的数据注册成表,方便用SQL进行处理,减少代码的开发量。 实际上SeaTunnel最 ...
笔记工作流的最佳实践
前言 作为一名技术工作者,持续的学习和记录是延续职业生涯的必备技能,有效的记录在网络浏览过程中获取到的知识点和定期的自我总结是提升自我的最佳途径,从接触计算机学习以来,我的笔记工作流随着知识面的扩张不断更改,到现在趋于稳定且效率还不错,所以想借此机会分享给大家,希望我走过的弯路能够减少大家的学习成本。 如何记录 对于技术的沉淀与文档记录,在我看来更多的是需要条理清晰,排版明确,不拖泥带水,也不要过多冗余,文档要有层次,最好要图文并茂。 基于这些特点,首先第一个想到是老牌文档Word,但Word虽好,也有很致命的缺点,那就是排版困难,不宜保存留档,严重依赖微软全家桶或wps全家桶,各个设备浏览不是很方便,可能我为了去排版一篇笔记要花半个小时,效率及其低下;随着知识面的不断增长,我接触到了Markdown,这种简单清晰明了的语法能够快速排版,笔者只需要专注于内容的输出,不需要花过多的时间在排版上,大大提升了生产力。 实际上Markdown这种语法在市场上也颇受技术工作者们的喜爱,目前95%以上的技术从业者都会使用Markdown进行笔记输出和知识沉淀。 笔记保存 在进行完笔记的技术选型之后 ...
DataX源码解析-数据传输
前言 书接上回,继续来聊一聊DataX源码,在上篇文章中我们已经对于DataX的调度流程进行了细致的剖析,这篇文章我们将更深层次的研究DataX在数据传输与交换方面的细节。 简单回顾 上文提到,DataX核心运行子单位是TaskExecutor,一个TaskExecutor中会拥有两个线程,分别是WriterThread和ReaderThread,这两个线程承担着整个数据传输的重任,所以今天整篇文章的重点将围绕这两个线程展开,如果读者阅读至此觉得概念晦涩难懂,请移步我之前的两篇文章去先了解一下整个DataX的原理和架构: DataX整体架构 DataX调度流程 线程的创建 来到TaskGroupContainer源码中,找到TaskExecutor新建WriterThread和ReaderThread的地方: 1234567891011// 生成WriterThreadwriterRunner = (WriterRunner) generateRunner(PluginType.WRITER);this.writerThread = new Thread(writerRunner, ...
数据结构系列35-快速排序
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/************************************************************************** File Name: quickSort.c* Author: TyrantLucifer* E-mail: TyrantLucifer@gmail.com* Blog: https://tyrantlucifer.com* Created Time: Sun 10 Apr 2022 02:29:02 PM CST ************************************************************************/#include <stdio.h>void printArray(int array[], int length) { for (int i = 0; ...
数据结构系列34-冒泡排序
1234567891011121314151617181920212223242526272829303132333435/************************************************************************** File Name: bubbleSort.c* Author: TyrantLucifer* E-mail: TyrantLucifer@gmail.com* Blog: https://tyrantlucifer.com* Created Time: Mon 04 Apr 2022 06:01:03 PM CST ************************************************************************/#include <stdio.h>void printArray(int array[], int length) { for (int i = 0; i < length; i++) { ...
数据结构系列33-希尔排序
123456789101112131415161718192021222324252627282930313233343536373839404142/************************************************************************** File Name: shellSort.c* Author: TyrantLucifer* E-mail: TyrantLucifer@gmail.com* Blog: https://tyrantlucifer.com* Created Time: Sun 03 Apr 2022 06:50:27 PM CST ************************************************************************/#include <stdio.h>void printArray(int array[], int length) { for (int i = 0; i < length; i++) & ...
Apache Seatunnel架构解析
概述 Seatunnel 是一个非常易用,高性能、支持实时流式和离线批处理的海量数据处理产品,架构于Apache Spark 和 Apache Flink之上,开源项目地址:https://github.com/apache/incubator-seatunnel 版本演变 Seatunnel原名为Waterdrop,在更名之后正式孵化为Apache项目,同时对于两个名字也对应了不同的版本,Waterdrop指1.x版本,Seatunnel指2.x版本,对于1.x和2.x有以下区别: 关键功能 1.x 2.x 支持spark yes yes 支持flink no yes 主要开发语言 scala java 主要构建工具 sbt maven 为什么我们需要Seatunnel Apache Spark和Apache Flink对于分布式数据处理和流式数据处理来说是一个伟大的进步,但较高的使用门槛让数据处理人员需要学习spark和flink复杂的运行机制和api才能够使用的更加顺畅,为降低数据处理门槛,且让spark和flink变得更加易用,减少学习成本,加快 ...