近日,由 TiDB 社区主办,专属于寰球开发者与技术爱好者的顶级挑战赛事——TiDB Hackathon 2020 较量圆满闭幕。往年是 TiDB Hackathon 第四次举办,参赛队伍规模创历届之最,共有 45 支来自寰球各地的队伍报名,首次实现寰球联动。通过 2 天工夫的极限挑战,大赛涌现出不少令人激动的我的项目。 为了让更多小伙伴理解这些参赛团队背地的故事,咱们开启了 TiDB Hackathon 2020 优良我的项目分享系列,本篇文章将介绍 TiFlink 团队赛前幕后的精彩故事。
Flink 是一个低提早、高吞吐、流批对立的大数据计算引擎,作为大数据处理畛域最近冉冉升起的一颗新星,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等性能,被广泛用于高实时性场景下的实时计算。2020 年 TiDB 与 Flink 正式开始单干,摸索将 Flink 与 TiDB 联合的解决方案。令人开心的是,在往年 TiDB Hackathon 上咱们就看到呈现了 3 个基于 Flink 的我的项目。 其中,TiFlink 队伍的我的项目为 Flink 实现了更好的 TiKV Source、Sink 和 TiDB Catalog Reader,反对 Snapshot 读取和 Change Log 增量读取和 2 Phase Commit 写入,以实现在 TiDB 里疾速创立 Materialized View 和在 Flink 里不便编写读写 TiKV 数据的批 / 流解决工作。 该我的项目凭借超高的人气一举夺得本届大赛最佳人气奖。咱们在赛后采访了 TiFlink 团队局部队员与评委李钰老师,邀请他们分享本人的 Hackathon 教训。
我的项目背景:当 TiKV 遇上 Flink
提起 TiFlink 我的项目的灵感,还得从队长张茄子去年在公司外部的尝试说起。他的公司有一些数据实时剖析的需要,但原有的数据分析工具在单表查问时很快,一旦到 join 时就不是很好搞。过后这个我的项目最终没能在外部胜利做进去,但想法始终都在,直到往年 Hackathon 期间,张茄子和队友们一起从新探讨了可能的计划。目前,TiDB/TiKV 提供的 Flink 集成和 Java 客户端具备如下缺点:
- Java 客户端不反对抓取 CDC 日志,应用 TiCDC 须要通过 Kafka 转发,比拟轻便和繁琐,提早较高;
- Flink 集成的 Source 只反对批量读入,不反对批流联合(即先批量读入,后拉取 CDC 日志进行增量更新);
- Flink 集成的 Sink 尚不反对 TwoPhaseCommit 协定,正在开发中的版本只反对各个节点独自 TwoPhaseCommit,不反对全局同步 TwoPhaseCommit。
张茄子察看到 Flink 有着很欠缺的零碎,在 Flink 里有一个 Flink CDC connector,然而只有 MySQL 的,没有 TiDB 的。所以队员们就想借助这次较量做出一个 TiDB 的 CDC connector,将其奉献到 Flink 和 TiDB 社区,这样就能够买通 TiDB 社区和 Flink 社区的单干,借助 TiKV + Flink 打造出一个 TiDB 的批流一体库。 这就是 TiFlink 的由来,通过它能够实现更好的 Flink 集成(Connector)以及提供物化视图(Materialized View)性能,显著进步 TiDB/TiKV 生态环境的 OLAP 能力。
我的项目设计:TiFlink 流批一体库诞生了
在较量中,为了将构想中的 TiFlink 流批一体库实现落地,队员们做出了一系列尝试:
- 为 TiKV 的 Java 客户端增加间接拉取 CDC 日志的性能,从而为实现批流一体数据处理的 Flink Source 创造条件;
- 为 Flink 开发 TiKV 兼容批读取和增量读取的 DynamicTableSource,实现不同隔离级别的读取性能;
- 为 Flink 开发兼容 TiKV 事务模型并反对 TwoPhaseCommit 接口的 DynamicTableSink,实现跨节点(切片,Region)统一的数据写入;
- 在上述组件的根底上,尝试实现 TiDB 上基于 Flink 的物化视图性能。
通过缓和的开发,在较量问难中 TiFlink 终于初见雏形,并顺利通过 DEMO 演示,TiFlink 团队为 TiKV 写了一个 DynamicTableSource,让 Flink 间接读取 TiKV snapshot 数据以及 CDC 流式变更数据,同时反对了 DynamicTableSink,能让 Flink 通过 TiKV 事务的形式将数据从新写回到 TiKV 外面。 通过这种形式,让大数据处理在 TiDB 以及 Flink 之间高效的流转。同时,TiFlink 也构建了一个 global snapshot coordinator,能够让分布式执行的 Flink 工作在以 snapshot isolation 的强统一形式来保护物化视图。
因为 Hackathon 走到一起的 TiFlink
令人诧异的是,在较量的短短几天工夫里就能做出如此齐备性能的 TiFlink,其 4 名队员能够说来自天南海北。队长张茄子来自寰球当先的招聘网站 Indeed,在日本做新我的项目孵化;乘蜗牛追乌龟本名徐哲,在大唐电信从事流媒体服务端研发,是多届天池大赛数据库较量骨灰级获奖选手;jiangplus 在一家 AI 和算法驱动的药物研发公司 Xtalpi,从事外部云原生机器学习平台的构建工作;SteNicholas(蒋晓峰(子懿))则在阿里云 Apache Flink 做生态相干工作。若在平时,看似分属于不同行业不同地区的四人可能永远都不会产生任何分割,但出于同样对 Hackathon 的酷爱,将他们串联到了一起。
Hackathon 对张茄子来说,最大的吸引是能够将本人的 idea 讲进去,同时可能意识到领有各种各样 idea 的敌人,大家一起分享本人的想法是一件十分开心的事件。
SteNicholas 认为 Hackathon 带来的最大播种莫过于能够用本人相熟的 Flink 或 TiDB 做任何想做的事件,只有能把它实现,就是一件特地 cool 的事件。
而对于队伍中年纪最小的徐哲而言,Hackathon 是一次开辟本人视线的好机会,岂但能够看到其余队伍提出了一些本人从未想过的 idea,还能逼着本人在很短的工夫内实现一个十分有意思的点子,实现对自我的挑战。
与以前加入过的 Hackathon 不同,TiDB Hackathon 以「∞」作为本次大赛主题,参赛队伍只有有翻新的 idea , 都能够拿进去参赛,在两天的编程里疯狂 coding,将本人的 idea 落地分享。对四人来说,这样的机会怎能错过?
在进行了一番探讨和交换后,张茄子和队友们决定将 TiKV + Flink 打造流批一体库作为本人的参赛我的项目。
往年因为疫情起因,大家都通过线上形式进行近程合作,2 人负责 Flink 开发工作,2 人负责 TiDB 开发工作,每隔几个小时便会沟通我的项目进度。队长张茄子认为对近程合作来说放弃肯定频次的沟通至关重要,须要确保每个人的工作内容都朝着同一个方向,不至于最初走歪。
SteNicholas 作为 TiFlink 惟一到现场参赛的队员,还通过线上向其余队员做起了现场直播,引得大家直呼艳羡。对 Hackathon 来说不能一起面对面奋斗,始终是一件十分遗憾的事件,大家都示意如果明年持续参赛,心愿还可能在现场相聚。
评委李钰老师是来自 Apache Flink & Apache HBase 的 PMC,出于职业敏感,对 Flink 这类生态联合的我的项目特地关注:“ 往年与 Flink 相结合的我的项目一共有三个,有通过 Flink 给 TiDB 做联邦查问的、有用 Flink 做物化视图的,但我感觉与 Flink 集成最深的还是 TiFlink。比方他们做了一个原生的 Java 的 CDC,利用 Flink 自身机制实现物化视图的 Snapshot 的全局性。我集体感觉这些方面再往后走都具备落地的价值,这也是我最喜爱这个我的项目的起因。”
在李钰看来,如果能将 TiDB 联邦查问的我的项目与 TiFlink 我的项目联合在一起,对用户而言会产生更好的成果。当初有很多业务场景既有实时计算大数据相干的需要,又有数据库查问的需要,在这种状况下,将 TiDB+Flink 联结起来造成解决方案十分具备实用价值。例如,Flink 其实能够间接给 TiDB 提供拜访 Hive 的能力。如果你既想查一个数据库里的数据,又想查一个 Hive 里的数据,就能够通过 TiDB 的这种规范 SQL 查问实现,屏蔽掉底层简单的细节,这对于客户而言是十分具备事实价值的计划。
将来期待:找到初期用户
2 天的较量工夫十分无限,队员们心愿在将来几个月找到一些初期用户,在用户反馈中不断完善 TiFlink 我的项目。队员们对此都很期待:“毕竟咱们本人的想法和用户的想法还是有很多不一样的中央,比如说在一些选型、设计上的问题,咱们本人没有方法解答,须要晓得对用户来说哪种形式比拟方便使用。 现实状况下,咱们当然心愿这个我的项目能够变成 TiDB 的一部分,作为一个整体被 TiDB 的用户十分不便地应用起来。”
李钰老师特地补充道:“其实 Flink 也始终在提批流一体数仓,在用户有实时需要的状况下,批流一体数仓可能极大地节俭整体 TCO。相似的计划之前在阿里外部也有过一些技术实现,但 TiKV+Flink 是首次以开源解决方案的模式予以实现,这能够为宽广用户提供更普惠的解决方案。”
除了 TiFlink,本届大赛中也涌现出不少令人激动的我的项目,除了本人的队伍,还有哪些是最感兴趣的呢?几位队员显著有着本人的偏爱:
张茄子:“我比拟喜爱的是几个大佬们做的那个 Index 的我的项目,十分具备想象力,把一些比拟新的想法都交融进来了,我感觉这也是最有前景的我的项目之一。”
徐哲:“我最感兴趣的是 UDF 和 TiGraph 两个队伍的我的项目。UDF 在演示期间的展现十分酷,TiGraph 在展现期间有一个和原生的 TiDB 的性能比照,成果也十分好。他们的我的项目都是十分实用的想法,最初都取得了奖项,阐明大家对他们也十分认可。”
Hackathon 倡议:参赛,享受较量
作为常常加入 Hackathon 的新手,队员们也给对 Hackathon 流动感兴趣的萌新们分享了一些集体教训:张茄子倡议新人肯定要大胆来参赛。很多参赛选手其实也有好的点子和想法,然而他不太敢来参赛,胆怯在众人背后露怯。其实大可不必,即便最终问难成果不好,被淘汰也没什么不好意思的。不要太执着于较量问题,享受较量过程就好了。你能够在这个过程中学习到很多货色,这才是最重要的播种。此外,如果想获得好问题的话,须要提前对 TiDB 和 TiKV 进行理解和学习,获奖队伍中有很多人都是社区中的长期贡献者,当时做一些准备会更有胜算。李钰老师认为 Hackathon 流动是一个锤炼人的好机会,对于技术人员而言十分具备价值。就像马拉松短跑一样,在平时纷繁复杂的工作之外给本人一个机会来发泄一下。 马拉松是一种对自我膂力极限的锤炼,Hackathon 则是一个脑力上的锤炼。 最简略的倡议就是要先来加入,在参赛的过程中享受较量。