FLIP-144: Native Kubernetes HA for Flink
本文是基于 FLIP-144 的笔记作品,主要描述 Flink HA 基于 Kubernetes 的设计思路
本文是基于 FLIP-144 的笔记作品,主要描述 Flink HA 基于 Kubernetes 的设计思路
DBLog: A Watermark Based Change-Data-Capture Framework
本文讨论了应用程序在使用多种异构数据库时所面临的数据同步挑战,并探讨了现有解决方案的局限性。通常,应用会利用不同的数据库以满足特定需求,例如存储基本数据或提供高级搜索功能。因此,保持多个数据库之间同步显得尤为重要。尽管之前有双写和分布式事务等解决方案,但这些方法在可行性、健壮性和维护性方面存在不足。
最近出现的一种替代方法是使用变更数据捕捉(CDC),从数据库的事务日志中捕捉更改的行,并以低延迟将其传递到下游。然而,数据同步不仅需要捕捉更改,还需要复制数据库的全量状态,因为事务日志通常不包含完整的更改历史。同时,还有需要高可用性事务日志事件的场景,以便数据库能够尽可能保持同步。
为了解决上述挑战,本文介绍了一种新颖的CDC框架,名为DBLog。DBLog采用水印(watermark)驱动的方法,允许通过直接从表中选择的行与事务日志事件进行交错,从而捕捉数据库的全量状态。该解决方案使得日志事件在处理选择操作时可以继续前进,而不会出现停滞。选择操作可以在任何时间对所有表、特定表或特定主键的表触发。DBLog以块的形式执行选择操作并跟踪进度,允许暂停和恢复。水印方法不使用锁,对源的影响最低。目前,DBLog已在Netflix的多个微服务中投入生产使用。
本文着重描述了 SourceReaderBase 实现逻辑,但是在描述 SourceReader 之前,肯定是需要了解与之关系密切的 SplitEnumerator 的行为,由于 SplitEnumerator 仅提供了一个接口,我们要确定多数情况下的实现,SplitEnumerator 是如何与 SourceReader 进行交互的,毕竟 Source 的起点是在 JobManager 的 SplitEnumerator 之中。
本篇文章主要目的是在工作和学习过中对于 Flink Source 的一些使用和学习的理解记录。
FlumeJava: Easy, Efficient Data-Parallel Pipelines
MapReduce 及类似系统极大地简化了编写数据并行代码的任务。然而,许多现实世界的计算需要一系列的 MapReduce 操作,编程和管理这些流水线可能很困难。我们介绍了 FlumeJava,一个Java库,它简化了开发、测试和运行高效数据并行流水线的过程。FlumeJava 库核心是一些代表不可变并行集合的类,每个类都支持一些操作,用于并行处理这些集合。并行集合及其操作提供了一个简单的、高层次的、统一的抽象,覆盖了不同的数据表示和执行策略。为了使并行操作能够高效运行,FlumeJava 推迟了它们的评估,而是在内部构建了一个执行计划数据流图。当最终需要并行操作的结果时,FlumeJava首先优化执行计划,然后在适当的底层原语(例如,MapReduces)上执行优化后的操作。并行数据和计算的高层抽象、延迟评估和优化以及高效的并行原语的结合,产生了一个易于使用的系统,其效率接近手动优化的流水线。FlumeJava目前正被谷歌内部数百名流水线开发者积极使用。
FlumeJava 是 Google 内部开发的一个库,专门用于简化大规模数据处理工作。它没有被开源。不过,FlumeJava 的概念和设计哲学影响了许多开源项目。
相似的开源实现最为出名的 Apache Beam:这是一个更广为人知的、由 Google 贡献给 Apache 软件基金会的开源项目。Apache Beam 提供了一种统一的编程模型,用于定义和执行数据处理工作流。这个项目的目标是允许你编写一次数据处理代码,然后在多个执行引擎(如 Apache Flink、Apache Spark 和 Google Cloud Dataflow)上运行。
pushX
与 pullX
接口提供 Plugins 数据通道能力,同时统一统计、限速能力。1 | ├── agent [ClassLoader/代理启动] |