Home

浅谈 Flink - KafkaTable 解析

flink 提供多种消费 Kafka 数据的方式,由于不同层级接口支持的功能范围、粒度不同,同时 flink 版本迭代频繁,接口也在不断发生变化,因此使用起来容易混淆。 当我们定义了一个 Kafka 的 DDL,例如: CREATE TABLE MyUserTable ( ... ) WITH ( 'connector.type' = 'kafka', 'connector.version' = '0.11' ... ) 在 DDL 背后都做了什么,使得我们能够通过 SQL 读写这张表?flink 如何组织其代码结构,如何复用 streaming 相关代码的?接口从 API 到 SQL,方式更加简洁的同时,又有哪些功能被忽略掉了? 这些疑问,在刚...

Read more

浅谈 Flink - JobGraph

生成StreamGraph后,接下来就是构造 JobGraph 了,这一步主要的变化是将尽可能合并多个相邻的 StreamNode. 1. Why 在分布式计算中,多个节点交换数据都通过 rpc 完成,这其中就少不了网络传输、序列化与反序列化的一系列过程,如果能够优化为硬盘或者内存处理,例如对于map(...).filt(...),理论上完全可以在本地串行计算完成,避免全量传输map的结果,在性能上明显就会有提高。 Flink 从 StreamGraph 转化为 JobGrpah 的过程,主要就是这个目的。例如对于 A → B → C → D 的调用顺序,如果 A B 可以合并为本地处理,那么就可以生成 A’ → C → D 新的 DAG 图,这就是 StreamGraph → ...

Read more

浅谈 Flink - StreamGraph

上一篇笔记介绍由 API 生成StreamExecutionEnvironment.transformations,接下来就是生成 StreamGraph. StreamExecutionEnvironment.execute里包含了诸如 StreamGraph、JobGraph、?等流程。 具体在StreamGraphGenerator.generate: StreamGraph generate() { streamGraph = new StreamGraph(executionConfig, checkpointConfig); ... alreadyTransformed = new HashMap<>(); for (Transformat...

Read more

浅谈 Flink - Transformations

年前开始接触 flink,到现在已经有三个月的时间了,除了最开始简单看了下 flink 的启动过程,最近一直被其 scala 及 SQL API 搞的很虚。这个假期得空,终于开始盘点下。 这篇笔记介绍下 transformations 的生成过程。 其实 flink 相关介绍网上比比皆是,为了避免拾人牙慧,本文主要介绍下自己的理解,参考文章附录在文末。 1. 开篇 以 flink 里的 Hello World 为例: val text = env.socketTextStream("127.0.0.1", 8011) text.flatMap(new FlatMapFunction[String, (String, Int)] { override def flatMa...

Read more

2019书单总结

19年看完的书单📖: 西游八十一案-大唐泥犁狱 半小时漫画中国史 半小时漫画世界史 半小时漫画经济学-生活常识篇 Scala谜题 图解HTTP 长安古意 追风筝的人 小岛经济学 殉罪者 Scala实用指南 四时之诗:蒙曼品最美唐诗 无所畏 网络是怎样连接的 路上通勤的时间,看完了《大唐泥犁狱》、《追风筝的人》,这两本都比预期要好看很多,非常推荐。 技术类的几本书籍收获一般,如果要学习 Scala 的话,还是推荐《快学Scala》这本。 19年想要了解下经济学,因此看了本《小岛经济学》,还不错,当然感觉对于我们来讲,初期通过视频学习可能更加通俗易懂。 《蒙曼品最美唐诗》是最出乎意料的一本,诗本身以及解读都很美,读完了赏心悦目。...

Read more

监控系统之度量系统:Dropwizard Metrics

Dropwizard Metrics Library 是一个 java 的监控工具包,Spark 将其作为 monitor 系统的基础实现。借助 Dropwizard Metrics 我们可以通过仅仅几行代码,就可以实现诸如数据分布、延时统计、计数等统计需求,将内部状态暴露出来。对应的,Metrics 实际上包含了两部分,监控的指标(Metric)以及指标如何导出(Reporter)。 1. Metric 1.1. Meter Meter 是一个与时间有关的统计值,例如我们可以这么使用: val requests = metrics.meter("requests") new Thread { ... requests.mark() } 底层...

Read more

《Scala谜题》读书笔记

有些问题还没有完全搞懂,不过先记录下来。 先放一张 scala 的类图: 笔记按照题目顺序整理。 //scalaVersion:2.12 package numericOps import scala.collection.mutable object ScalaPuzzlers extends App { /* // 1. 占位符 // Hi // Hi // List(2, 3) // 常规匿名函数是从 => 一直到代码块结束的所有代码 println(List(1, 2).map{i => println("Hi"); i + 1}) // Hi // List(2, 3) // 占位符_语法定义的匿名函数,只包括含有_的表达式 ...

Read more

度厂回忆录

W 说,“当你不能够再拥有的时候,你唯一可以做的,就是令自己不要忘记。” 我想起来成才从 A 大队走的时候,他问许三多,“咱们当兵三年了,你能想起其中的每一天吗?我想念七连,又臭又硬的钢七连,我使劲想,可我想不起一件事,一个人……” 不久后的某天,我也会离开百度,就像成才当年对 A 大队的向往,我也曾经那么向往在百度工作。不同的是,当离开的时候,我开始怀念在这里的每一天。我突然想要记录这里的每一件事情,这种感觉在我提了离职之后愈加强烈,以至于那么一瞬间有后悔的冲动。 当说出了告别,才意识到有多么不舍。当意识到不能够再拥有的时候,我告诉自己,记录下来不要忘记,这就是我的度厂回忆录。 1. 新兵报到 工位最底层的抽屉里,至今保留着一张纸,上面是入职的流程。工位来回搬了几次,这张纸...

Read more