本文着重描述了 SourceReaderBase 实现逻辑,但是在描述 SourceReader 之前,肯定是需要了解与之关系密切的 SplitEnumerator 的行为,由于 SplitEnumerator 仅提供了一个接口,我们要确定多数情况下的实现,SplitEnumerator 是如何与 SourceReader 进行交互的,毕竟 Source 的起点是在 JobManager 的 SplitEnumerator 之中。

Read more »

文章大纲

  • 介绍 DAG 是什么
  • 介绍 DAG 能解决什么问题,有哪些出名的系统是依赖 DAG 的
  • 介绍 DAG 的实现
  • 介绍 DAG 算法场景
Read more »

Abstract

Apache Flink是一个用于处理流数据和批量数据的开源系统。Flink建立在这样一种理念之上:许多类别的数据处理应用程序,包括实时分析、持续数据流、历史数据处理(批处理)和迭代算法(机器学习、图分析),都可以表达并作为管道化的容错数据流来执行。在本文中,我们介绍了Flink的架构,并展开讨论了如何将一组(看似多样的)用例统一到一个单一的执行模型下。

Read more »

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)上运行。

Read more »

背景

  • 使用 Postgresql Jdbc Driver 读取大量数据

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version>
    </dependency>
  • 读取的数据中包含 timestamp with time zone 与 time with time zone

  • Pg Server 是 +08:00 时区

Read more »

主要概念解释

  • Reader:数据采集模块,负责数据读取,将数据发送给 Channel。
  • Writer:数据写入模块,负责不断读取 Channel 的数据,并将 Channel 的数据写入到目的端。
  • Channel:通过 pushXpullX 接口提供 Plugins 数据通道能力,同时统一统计、限速能力。
  • RecordSender:基于 Channel 封装的接口,用于 Reader 将 Record 传递到框架
  • RecordReceiver:基于 Channel 封装的接口,用于 Writer 从框架获取 Recrod
  • Job:单个数据同步的作业,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job 模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子 Task)、TaskGroup 管理等功能。
  • Task:Task 是 DataX 作业的最小单元,每一个 Task 都会负责一部分数据的同步工作。Task 由 TaskGroup 进行管理。Task 会固定启动 Reader -> Channel -> Writer 的线程来进行同步工作。
  • TaskGroup:管理一组 Task 的运行。
Read more »

结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
├── agent							[ClassLoader/代理启动]
├── arthas-agent-attach [Agent Attach?]
├── arthas-spring-boot-starter [针对 spring boot-2 提供的自动集成技能]
├── arthas-vmtool [JVM 工具模块]
├── async-profiler [profiler 的 so 文件]
├── bin [shell 脚本]
├── boot [启动模块]
├── client [client 模块]
├── common [通用模块]
├── core [核心功能模块]
├── demo [demo 展示]
├── lib [arthas jni]
├── math-game [demo]
├── memorycompiler [动态编译模块]
├── packaging [打包专用]
├── site [arthas 官网信息]
├── spy [定义 SPI(方法执行前后插入点)]
├── testcase [测试 case]
├── tunnel-client [tunnel-client/server 均是为了提供管理多个 arthas 的能力]
├── tunnel-common
├── tunnel-server
└── tutorials
Read more »

介绍

本文的起因是在工作中到 Kafka 的使用最广泛、性能要求最高、问题最多的组件。而其中性能问题的调优思路往往与 Kafka 的攒批息息相关。所以这篇文章中会一起学习 Kafka 攒批原理及如何使用 Kafka 的攒批。

Read more »

文章简介

  • [正常]叙述 Kafka 从 Producer 发送消息到 Server 日志落盘全过程
  • [提升]详解 Kafka 日志格式,并通过 Java / Rust 两类解析方式
  • [深入]Rust-Kafka-Client Producer 到 Kafka Server
  • 需要说明的是这篇文章的局限性
    • 仅介绍两个 topic 各有两个 partition 为基础进行介绍,会调用 flush 强行将消息刷新进入 topic 内。发送消息每个 partition 各 5 条
    • 不涉及鉴权部分
    • 不涉及事务消息及有序消息部分
    • Kafka 版本 3.1.0,如无必要不会涉及老版本的历史包袱说明
    • 流程图中只记录关键路径,关键信息,部分细节信息可能需要细看代码才行,但是不妨碍原理理解
    • 这其中会涉及到 ReplicaNetwork 的部分知识,但是在这篇文章中只会涉及到比较浅显的部分,我们默认网络层和主副本是对我们透明的,对其中细节及设计部分我们会在另外的文章中讲解。
Read more »
0%