时间与精神的小屋

专注思考的时候,时间仿佛也静下来了


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

Flink 1.9 Release 解读

发表于 2019-09-21 | 分类于 Flink |

距离上个发行版近 4 个月后,不久前 Apache Flink 发行了 1.9 系列的首个版本。Flink 1.9 是个有重要意义的版本,它初步合并了 Blink 的大部分新特性(虽然是预览特性),其中包括 Blink planner、Hive 集成、Python Table API 和新版 Web UI。此外,1.9 版本正式引入了 Savepoint Processor 来提供离线访问和修改 State 的能力,这也是社区呼声比较高的一个特性。下文将选取一些笔者认为比较重要的特性、improvement 和 bugfix 进行解读(主要集中在实时场景),详细的变动进参考 [1]。

阅读全文 »

深入理解 Flink 容错机制

发表于 2019-07-28 | 分类于 Flink |

作为分布式系统,尤其是对延迟敏感的实时计算引擎,Apache Flink 需要有强大的容错机制,以确保在出现机器故障或网络分区等不可预知的问题时可以快速自动恢复并依旧能产生准确的计算结果。事实上,Flink 有一套先进的快照机制来持久化作业状态[1],确保中间数据不会丢失,这通常需要和错误恢复机制(作业重启策略或 failover 策略)配合使用。在遇到错误时,Flink 作业会根据重启策略自动重启并从最近一个成功的快照(checkpoint)恢复状态。合适的重启策略可以减少作业不可用时间和避免人工介入处理故障的运维成本,因此对于 Flink 作业稳定性来说有着举足轻重的作用。下文就将详细解读 Flink 的错误恢复机制。

阅读全文 »

Flink 非 JVM 语言支持计划

发表于 2019-07-11 | 分类于 Flink |

众所周知,Apache Flink 是基于 JVM 语言开发的,所以提供的运行环境和编程 API 都是 JVM 语言(目前 Flink Python API 是用 Jython 实现的,因此也算 JVM 语言)。然而基于 JVM 开发的计算引擎普遍会遇到的一个问题是,做数据分析或机器学习的用户通常主要使用更声明式的语言,比如 Python 或者 R。因此为了支持多语言,尤其是非 JVM 语言,分布式计算领域业界在计算引擎的语言可移植性上做了不少的努力,其中比较出名的项目包括 SparkR、PySpark 和 Apache Beam。而目前 Apache Flink 社区也计划推进多语言支持,其中将优先支持 Python,下文将详细解析实现的关键点及具体方案。

阅读全文 »

Flink State As Database

发表于 2019-06-02 | 分类于 Flink |

有状态的计算作为容错以及数据一致性的保证,是当今实时计算必不可少的特性之一,流行的实时计算引擎包括 Google Dataflow、Flink、Spark (Structure) Streaming、Kafka Streams 都分别提供对内置 State 的支持。State 的引入使得实时应用可以不依赖外部数据库来存储元数据及中间数据,部分情况下甚至可以直接用 State 存储结果数据,这让业界不禁思考: State 和 Database 是何种关系?有没有可能用 State 来代替数据库呢?

阅读全文 »

Flink 1.8 Release 解读

发表于 2019-04-14 | 分类于 Flink |

Flink 1.8

在距离上个 feature 版本发布近四个月之后, 近日 Apache Flink 发布了 1.8 版本。该版本处理了 420 个 issue,其中新 feature 及改进主要集中在 State、Connector 和 Table API 三者上,并 fix 了一些在生产部署中较为常见的问题。下文将选取一些笔者认为重要的新特性、improvement 和 bugfix 进行解读,详细的改动请参照 release notes [1]。

阅读全文 »

Flink 网络传输优化技术

发表于 2019-04-03 | 分类于 Flink |

作为工业级的流计算框架,Flink 被设计为可以每天处理 TB 甚至 PB 级别的数据,所以如何高吞吐低延迟并且可靠地在算子间传输数据是一个非常重要的课题。此外,Flink 的数据传输还需要支持框架本身的特性,例如反压和用于测量延迟的 latency marker。在社区不断的迭代中,Flink 逐渐积累了一套值得研究的网络栈(Network Stack),本文将详细介绍 Flink Network Stack 的实现细节以及关键的优化技术。

阅读全文 »

什么是 Flink State Evolution?

发表于 2019-03-17 | 分类于 Flink |

State Evolution 是 Apache Flink (下简称 Flink)1.7 版本引入的新特性,目的是为用户提供迭代或修改 State 的方法,以适应长期运行的作业的版本迭代需求,比如迁移 State 到不同的序列化框架,或者对 State 的数据结构进行改变,甚至直接对 State 的内容进行修改。该特性对于企业级应用来说有着重大的意义。

作为 Statefull 计算框架,Flink 作业的状态通常用 State API 来保存而不是存在的数据库等外部存储,这样在获得更好的一致性和数据本地性的同时,也牺牲了使用数据库的灵活性和可访问性。State 以序列化的形式(Savepoint/Checkpoint)存在,对于很多不熟悉 Flink 序列化的用户来说相当于黑盒子,难以验证其中的数据正确性,更不用说修改其数据结构或者序列化格式,而 State Evolution 则是 Flink 在 State 管理上的一次很好的探索。

阅读全文 »

深入理解流计算中的 Watermark

发表于 2019-02-24 | 分类于 实时计算 |

近年来流计算技术发展迅猛,甚至有后来居上一统原本批处理主导的分布式计算之势,其中 Watermark 机制作为流计算结果准确性和延迟的桥梁扮演着不可或缺的角色。然而由于缺乏高质量的学习资源加上计算 Watermark 确实不是一件容易的事情,不少有着批处理计算背景的用户在流计算作业的开发中可能并不理解 Watermark 的重要意义,从而多走了很多弯路。为此,本文将基于笔者的学习积累和开发经验,谈谈个人对 Watermark 的理解,希望起到抛砖引玉的作用。

阅读全文 »

Flink on YARN Security 浅析(Flink Part)

发表于 2019-01-06 | 分类于 Flink |

在上篇关于 YARN 系统 Security 的博客,我们解析了通过 YARN 提供的 Security API,Application 已经在 RM 注册并且可以顺利地申请到 container,但 YARN 对 container 后续的凭证刷新(reacquire)并不能作用到已经在运行的 Application 进程,因此对于长期运行的 Application 而言要开发者自己实现认证和后续凭证刷新的逻辑。本文将接着分析 Flink 如何在申请到的 container 启动 jobmanger 和 taskmanager 并完成认证,也就是 Flink Application 自身的认证,以及后续的凭证刷新方法,最后再讲述最近社区对于 Flink on YARN Security 改进提案。

阅读全文 »

Flink on YARN Security 浅析 (YARN Part)

发表于 2018-12-23 | 分类于 Flink |

自我们将作业迁移到 Kerberized 的 YARN 新集群后,运行中的作业有一定几率出现出现认证失败,其中失败有 AMRMToken 过期导致 AM 无法与 RM 通信而被 kill 掉和 AM 申请的新 container 启动时报缺少 credential 两种表现。出现了这个问题后只能重启作业解决,这严重影响了平台的稳定性,因此笔者前后投入了接近两周的时间去研究这个问题,最后定位到问题在于 RM 刷新 viewfs token 时只会刷新第一个挂载的 FS 的 token。另一方面,笔者对于 YARN Security 和 Flink 与 YARN 在安全机制上的集成已经有了一定的积累,所以先记录并分享出来,以便后续有需要时检索(retrive)和与其他同学讨论交流。

阅读全文 »
1234…8
Paul Lin

Paul Lin

76 日志
17 分类
47 标签
RSS
GitHub
© 2016 - 2024 Paul Lin