Flink应用(1)
1 Flink与大数据计算
Flink以Stream模型为基础对数据计算进行建模,为批和流的处理实现了统一。并在低延迟、稳定性、编程接口友好等方面具有较大的优势,是大数据实时计算的利器。从下图(摘自官方)可以看出,Flink将来自各个数据源(Source)的数据进行计算,让后将结果交给各个下游数据宿(Sink)进行后续消费。同时,对于Source和Sink也可以是Flink计算应用,进行更复杂的级联,构建更丰富的数据处理模式。

Flink以Stream模型为基础对数据计算进行建模,为批和流的处理实现了统一。并在低延迟、稳定性、编程接口友好等方面具有较大的优势,是大数据实时计算的利器。从下图(摘自官方)可以看出,Flink将来自各个数据源(Source)的数据进行计算,让后将结果交给各个下游数据宿(Sink)进行后续消费。同时,对于Source和Sink也可以是Flink计算应用,进行更复杂的级联,构建更丰富的数据处理模式。
首先,动态加载与调用不是个新问题,方法也非常直接。关键就是使用DexClassLoader。
这个方法有一个副作用,那就是/proc/self/maps下会留下很多份dex加载记录,需要到jvm GC时才能释放,内存泄漏倒是没有,就是不太好看。
对于入参不是String,返回结果不是String的情况,做个Ser/De来搞定即可,接口的界面也能保持干净。
动态脚本有诸多用途,对于不停机变更执行逻辑,实现部分开放式的业务动态性非常有帮助。不过好的设计需要考虑性能、边界、变更控制等问题,以达到“受控的动态”能力。
JVM提供了不错的脚本接口,从invokedynamic到GraalVM,多语言、动态语言、高性能是发展方向。
Groovy作为可以和Java无缝交互的动态语言,利用了invokedynamic来实现核心功能,开发比较活跃,是动态化比较好的选择。下面介绍几种Groovy嵌入Java应用的方法。为达到class缓存、线程安全等目的,一些其他的方法不做介绍。
Java 11已于2018-09-25发布,作为一个LTS版本,值得重点关注。但从Java 8升级上来还是会碰到不少问题。
1、 project需要增加jaxb依赖,否则编译报错。
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
增加下面的依赖:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
转自:https://zhuanlan.zhihu.com/p/25506762,修改排版等内容
人孰无过,过而能改,善莫大焉。程序运行过程中总是会出现各种各样的问题,导致程序出现异常或错误,这些异常和错误本身不是 bug,但是如果不处理好的话就会成为 bug。不同编程语言提供了不同的机制来处理错误和异常,一般分为两大类:把错误当作值来处理;抛出异常。
Rust 提供以下基础设施做错误处理:
Option,
Result,
unwrap,
expect,
combinators,
try! macro,
Error trait,
From trait,
Carrier trait/Try trait,
Rust 并没有提供基于 exception 的错误处理机制,虽然 panic! 宏在让进程挂掉时也抛出堆栈,同时也可以用 std::panic::catch_unwind 捕捉 panic,但是极其不推荐用来处理常规错误。