2021的年终总结-风过无痕

前言:今年也要继续加油呢,路还很长,度过的夜晚很久,愿灯火会为你指引方向

可以看到我今年确实尝试去打了一些比赛,看了一些源码期望提有价值的PR。但遗憾的是没有好的结果,虽然有积累,但是远远不及我对自己的要求

本来我试想的,希望做到以下几点:

  • 通过支持RocketMQ消费端多线程写offset时涉及冷热存储的读写分离,来加深自己对Leveldb的了解,并且将其中的部分思想进行重构,纳入到自己的方案当中
  • 通过支持flink社区roman的广义增量检查点监控,来让自己明白监控changlog延迟指标从发生checkpoint到写入backend都经历了哪些流程,并且添加相关的监控
  • 通过支持pulsar社区metadata模块的etcd选举,理清pulsar底层从client写入broker,再到ledeger存储,到写入bookie存储的整个工作流程

关于为什么没有时间跟进,哪些事情阻碍了我呢:

  • 公司需要支持通用版的protobuf-format,但是不要求跟社区一致,由于对protobuf codegen以及到flink format的桥接概念不熟,导致跟踪源码时间过长delay了
  • 公司要求迁移的老任务,因为schema原先不由数据同步平台管理,只是要求不丢数,要求在不该动且无法获取上下游表schema的情况下 支持kafka2hdfs,为此调研GenericMemoryCatalog支持HiveTableSink
  • 熟悉公司新平台以及旧业务的oncall

可以从以上情况上看到今年主要是flink方面的工作,导致我没有时间和精力去做社区上的一些任务。除此之外,自己底层知识的严重匮乏导致思路受阻,花了大量的时间成本来弥补,以及对开源项目的环境配置不熟悉,浪费了周末的时间去踩坑

总的来说 不论我在今年得到了什么,还是觉得心灰意冷

目前还在进行中的事:

  • flink hackthon 2021的赛题

github.com/flink-china…

目前我准备支持的工作:

本次参赛的主旨是为了实现flink sql当中多表的物化视图,
当前为了使在两张源表(一张批处理,
一张流处理),存在一端延迟的时候,checkpoint产出快照的
一致性,需要调研epoch-commit 支持物化视图的一致性提交

前置的准备工作:
1.模拟数据源(mysql,或者pulsar) 
本地通过DockerClient直连dockerHub(没办法断网可跑?
我不信本地起一个DockerHub不行)
一个怼hive一个怼kafka,跑一段程序join起来。
2.在schema反序列化那一层 实现一个detected代理层
具体可以参考Blink的PlannerContext
这里的话 需要适配不同的format类型(写SQL的时候指定的)


- 1.在引入到flink源码的过程当中
因为ScanRuntimeProvider是位于runtime层,
flink-connector文件夹下 每个connector
都是继承自StreamRunTimeProvider
为了不让用户使用批流融合数据源的时候
裸写每一种connector的RuntimeProvider
需要重新实现一种连接器,对于批或者流的数据源的RuntimeProvider
以Wrapper的设计模式包装,并且兼容不同的数据源类型

1.完善单元测试 && 集成测试

对于单元测试而言:
- 1.当前欠缺对于在不同时间点,比如当前当前一个表延迟两个小时,
应当记录全局的watermark标记,像当前WatermarkAlignSupport的unit测试
其实只是跑通了本地时间与水印时间的到达时间间隔是否符合预期
可以参考flink的单元测试 用docker镜像本地起mini-cluster用于衡量
批处理源以及流处理源到达时候对其的epoch
- 2.创建批流join的物化视图
对于集成测试而言
- 1.在SQL的执行层
1.一张mysql表 join 一张pulsar表 批流join 此时两端数据都不延迟
2.一张mysql表 join 一张pulsar表 批流join 此时mysql端数据不延迟
3.一张mysql表 join 一张pulsar表 批流join 此时pulsar端数据不延迟
- 2.对于批流的后置处理算子(coProcessFunction),如果存在有一端存在时延的场景
需要判断是否和存在state的Seatch+T的延迟时间是一致的

根据flink贡献文档 e2e端到端测试可以在微软提供的Azure流水线上执行: 
flink doc:https://cwiki.apache.org/confluence/display/FLINK/Azure+Pipelines
我的流水线: https://dev.azure.com/1817802738/_git/Flink

2.kafka/pulsar的展示

这一块目前在本地已经调通,通过和@首维的沟通
1.我们需要起一个docker环境 分别部署
pulsar standalone 以及 flink standalone
方便在本地起工程的时候便于远程调试,但是演示的时候需要跑的快
这里可以考虑Application -> local on docker

ps:最近发现flink以及pulsar都可以在本地起一个dockerhub
基于testcontainers项目提供的DockerClient进行本地测试

2.在runtime层引入全新的UnifiedTableSource
用来扫描对端数据的数据行
3.在format层 需要对 Join中间结果产生的数据,
基于flink1.13文档中提供的全新Changlog Format的方式
将 ex:TestChangelogDecodingFormatFactory引入
flink-format模块

4.写一个flink sql 保证 sql转datastream部分可以

那么既然是要参加比赛,必然要向所有人说明做这件事情的价值是什么
所以最好的方式是完成一个SQL流式平台的展示,根据和@赤蒙的沟通
如果时间足够,尝试基于 flink-sql流平台(社区有一部分人在用)
https://github.com/zhp8341/flink-streaming-platform-web
在他的工程当中引入我们上述打包好的源码jar包

//TODO 增量同步组件的支持
dezuieam,flink-cdc-connector
//TODO 调研epoch-commit 支持物化视图的一致性提交


复制代码
  • pulsar consumer端分区消费速率支持

github.com/apache/puls…

我是一个不怎么喜欢长篇大论的人,因为纸上终觉浅,觉知此事要躬行。你的所言所行,终究需要通过实践来进行证明。那么就导引出三个很简单的问题

  • 问心

    • 你为什么要写代码

    我觉得每个人自一出生起都会有自己觉得接触就会觉得开心的事情。比如,第一次听到蝉在叫,第一次手指接触钢琴的琴键,第一次看到好看的动漫配图,第一次看到好看的动画片。 代码对我而言也不例外。在那年高考失利的那个夏天,手指第一次敲出hello world的那个晚上。我第一次,感受到了发自内心的喜悦。那个时候我就在想,这可能是我这一生中觉得最开心的事情了。终于能有一件,我觉得哪怕是花费几天几夜踩坑得到结果也觉得兴高彩烈的事。

    • 是什么促使你一直写代码

    是因为对技术的热爱?这话说出口我都有些不好意思。因为我的确是大学零基础编程起步,跟某些初中高中时代就在写代码的选手不一样。大学四年,基本都在图书馆度过。说真的,我很感谢大二开始坐在图书馆的那个自己,弥补了我计算机的理论基础。如果不是从那个时候开始,我或许跟刚进社会的小白同学一样,现在可能还无法接触到技术的本质--自顶向下分析。当时刚毕业的第一份工作,主管反复强调最好要能在梳理业务的时候,把流程图给画好,这样你自己的思路理顺了,别人也能明白你解释的是什么意思。

    就这样,通过两个周末反复debug业务代码,第一次逆向出了公司某个项目的大体流程,以及自顶向下梳理出了对账系统的泳道图 对账系统泳道图: www.processon.com/view/link/5… ps: 公司的业务保密,不能公开

    是因为代码改变了我的人生观

    • 你觉得写代码的成就感是什么

    世界上最漫长的时光是沉浸在某样事物当中,成为自己世界的一部分,深陷其中不能忘怀。大二的时候看到四月谎这部动漫,女主宫园薰沉浸在演奏的余韵中的那一幕让我触动。她仿佛就站在音乐的花海中,被无尽扬起的花瓣怀抱着一样。那一刻我觉得她真的很快乐,因为即便带着无法医治的病痛,也依然站在舞台上演奏完了整场。也难怪有马被她所打动。成就感,就是你在经历过漫长的黑夜之后,看到那一刻破晓的曙光。在这其中度过的漫漫长夜,不要心急,不要悲伤,抬起头放眼望去,所见皆星河。

  • 问事

    • 你打算把事情做到什么程度

      确实,我把目标定的太高了。但是我并不后悔,既然我选择了这条路。就不在乎旁人讲什么好高骛远,感动自己。世间所有的一切,不过是天助自助者的选择结果罢了。到了最后的最后,我会成为什么样子,这件事由我自己主宰。而不是世上任何人的评论。至于做到什么程度,自然也是船到桥头自然直。

  • 问己

Continue...QwQ

猜你喜欢

转载自juejin.im/post/7040696309905948709