Flink的常见问题

640?wx_fmt=png

Flink仅用于(近)实时处理用例吗

640?wx_fmt=png

Flink是一个非常通用的系统,用于数据处理和数据驱动的应用程序,数据流作为核心构建块。这些数据流可以是实时数据流或存储的历史数据流。例如,在Flink的视图中,文件是存储的字节流。因此,Flink支持实时数据处理和应用程序,以及批处理应用程序。

640?wx_fmt=png

使用Flink有哪些先决条件

640?wx_fmt=png

1.您需要Java 8来运行Flink作业/应用程序

2.Scala API(可选)取决于Scala 2.11

3.Apache ZooKeeper需要高度可用且没有单点故障的设置

4.对于可以从故障中恢复的高可用流处理设置,Flink需要某种形式的分布式

5.存储用于检查点(HDFS / S3 / NFS / SAN / GFS / Kosmos / Ceph / ...)

640?wx_fmt=png

Flink如何与Hadoop堆栈相关联

640?wx_fmt=png

Flink独立于Apache Hadoop,并且在没有任何Hadoop依赖性的情况下运行。

但是,Flink与许多Hadoop组件集成得非常好,例如HDFS,YARN或HBase。与这些组件一起运行时,Flink可以使用HDFS读取数据,或写入结果和检查点/快照。Flink可以通过YARN轻松部署,并与YARN和HDFS Kerberos安全模块集成。

640?wx_fmt=png

NotSerializableException

640?wx_fmt=png

       Flink使用Java序列化将应用程序逻辑的副本(您实现的功能和操作以及程序配置等)分发给并行工作进程。因此,传递给API的所有函数都必须是可序列化的,如java.io.Serializable所定义 。

       如果您的函数是匿名内部类,请考虑以下事项: 使函数成为独立类或静态内部类。使用Java 8 lambda函数。

       您的函数是否已经是静态类,请检查在创建类的实例时分配的字段。其中一个字段最有可能包含非可序列化类型。在Java中,使用a RichFunction并初始化open()方法中有问题的字段。在Scala中,您通常可以简单地使用“lazy val”来推迟初始化,直到分布式执行发生。这可能是一个较小的性能成本。您当然也可以RichFunction在Scala中使用。

640?wx_fmt=png

ClassCastException:X无法强制转换为X

640?wx_fmt=png

您看到样式中的异常com.foo.X无法转换为com.foo.X(或无法分配给com.foo.X)时,这意味着该类的多个版本com.foo.X已由不同的类加载器加载,并且尝试将该类的类型相互分配。

原因可能是:

1.通过child-first类加载进行类复制。这是一种允许用户使用Flink使用的相同依赖项的不同版本的预期机制。但是,如果这些类的不同副本在Flink的核心和用户应用程序代码之间移动,则可能发生此类异常。要验证这是原因,请尝试classloader.resolve-order: parent-first在配置中进行设置。如果这使错误消失,请写入邮件列表以检查是否可能是错误。

2.从不同的执行尝试缓存类,例如通过Guava的Interners或Avro的Schema缓存等实用程序。尝试不使用interner,或者减少interner / cache的范围,以确保每当启动新任务时都会创建新的缓存。

640?wx_fmt=jpeg

你可能感兴趣的:(Flink的常见问题)