面向对象编程(OOP)的七大原则
单一职责原则(SRP):一个类只应该有一个单一的责任,即一个类只需要完成一个明确的任务或功能。这个原则可以帮助你确保你的代码更加模块化和易于理解。 开闭原则(OCP):一个类应该对扩展开放,对修改关闭。这意味着你应该尽可能使用抽象和接口,而不是具体实现来编写代码,以便于在需要添加新功能时不需要修改现有代码。 里氏替换原则(LSP):子类应该能够替换掉它们的父类并保持程序的正确性。这个原则确保了
Flink - 旁路缓存和异步IO的实现
AsyncIO APIAsyncIO API提供了异步IO操作,其中包括将数据读入缓存中,等待异步IO操作完成,然后再将数据发送到下游任务。在这个过程中,Flink可以同时执行其他任务,从而提高了系统的并行度和吞吐量。 // 创建AsyncIO操作 AsyncFunction<String, String> asyncFunction = new AsyncFunction&l
QPS/TPS 的介绍
QPSQPS通常指每秒钟可以处理的查询请求次数。对于大数据处理系统来说,这可能是指每秒处理的数据读取或写入操作次数。例如,对于一个能够从Hadoop分布式文件系统(HDFS)中读取1000次/秒的系统,其QPS为1000。 TPSTPS,即Transactions Per Second,指每秒钟可以处理的事务数。在大数据处理系统中,事务可以是一个复杂的数据操作,如数据转换、聚合、过滤、排序等
Flink - 资源配置调优
Generic CLI 模式标准的Flink任务提交脚本(Generic CLI 模式),从1.11开始,增加了通用客户端模式,参数使用-D 指定 bin/flink run \ -t yarn-per-job \ -d \ -p 5 \ 指定并行度 -Dyarn.application.queue=test \ 指定yarn队列 -Dj
Flink - 安装包scala 2.12和scala 2.11的区别
区别概况Apache Flink是一个分布式数据流处理框架,支持使用Scala和Java编写Flink应用程序。在安装Flink时,您需要选择与您使用的Scala版本匹配的Flink安装包。以下是Flink安装包Scala 2.12和Scala 2.11之间的区别:编译器版本:Scala 2.12和Scala 2.11使用不同的编译器版本。Scala 2.12使用Scala编译器2.12.x,
安装Hadoop3X 出现的错误信息
启动hdfs错误错误信息:ERROR: Attempting to operate on hdfs namenode as rootERROR: but there is no HDFSNAMENODE_USER defined. Aborting operation.错误原因:试图以根用户身份在hdfs namenode上操作,但是没有定义HDFS NAMENODE _用户。中止操作。解决
Flink - Task 任务调度执行流程
流程图
Flink - 组件通信过程
流程图
Flink - Checkpoint配置注意点
配置值注意项:(源码分析)StreamingJobGraphGenerator.java CheckpointConfig cfg = streamGraph.getCheckpointConfig(); long interval = cfg.getCheckpointInterval(); if (interval < MINIMAL_CHECK
Flink 算子链可以合并的源码分析
源码示例StreamingJobGraphGenerator.java for (StreamEdge outEdge : currentNode.getOutEdges()) { if (isChainable(outEdge, streamGraph)) { chainableOutputs.add(outEdge);
Flink - 算子链合并方法
方法如下:相邻的算子:当两个算子直接连接在一起,没有其他算子或键控操作符将它们分离时,它们就会被自动合并为一个算子链。相同的操作类型:当两个算子拥有相同的操作类型时,它们就可以被合并为一个算子链。算子的并行度相同:当相邻的两个算子拥有相同的并行度时,它们可以被合并为一个算子链。用户手动合并:如果用户通过调用 DataStream.transform() 方法来显式地定义算子链,那么这些算子也会
Java - Map的使用技巧
技巧一: Map<String, String> appMasterEnv = new HashMap<>(); 声明中的Map<String, String>使用了泛型的原始类型,这意味着在编译时,编译器将不会检查该Map对象中添加到其中的键和值的类型是否正确。这可能会导致运行时错误或异常。因此,应该避免使用泛型的原始类型。 技巧二: Hash
Flink中的堆内存和堆外内存的作用
堆内存堆内内存指的是由 Java 虚拟机(JVM)所管理的内存,这部分内存主要用于存储 Java 对象。在 Flink 中,堆内内存主要用于存储算子状态(Operator State)和用户定义的聚合器(Aggregator)等数据结构。堆内内存的好处是可以充分利用 JVM 的垃圾回收机制,避免了手动管理内存的麻烦,但缺点是受到 JVM 的内存限制,不适用于大量的数据存储。 堆外内存堆外内存
Kafka - 支持压缩种类
支持以下压缩类型GZIP:GZIP是一种基于DEFLATE算法的压缩算法,通常用于文本数据。Snappy:Snappy是一种快速压缩算法,它可以在不牺牲太多压缩比的情况下提供很高的压缩和解压缩速度。它通常用于对二进制数据(如Avro或序列化的Java对象)进行压缩。LZ4:LZ4是一种快速压缩算法,它比Snappy更快但压缩比稍差。它通常用于对大量的日志数据进行压缩。ZStandard:ZSt
Java - 可变参数的使用
示例 List<MetricsReporter> reporters = config.getConfiguredInstances(ProducerConfig.METRIC_REPORTER_CLASSES_CONFIG, ClusterResourceListeners clusterResourceListeners = configureClusterResour
Kafka - 监控软件
KafkaManager软件简介 管理多个kafka集群便捷的检查kafka集群状态(topics,brokers,备份分布情况,分区分布情况)选择你要运行的副本基于当前分区状况进行可以选择topic配置并创建topic(0.8.1.1和0.8.2的配置不同)删除topic(只支持0.8.2以上的版本并且要在broker配置中设置delete.topic.enable=true)Topi
Kafka - 自定义分区器
代码示例 - 自定义分区 public class PhonenumPartitioner implements Partitioner{ @Override public void configure(Map configs) { // TODO nothing } @Override public int pa
磁盘顺序写的介绍
介绍磁盘顺序写是指按照一定的顺序向磁盘写入数据,通常是将一段连续的数据块写入到磁盘的某个区域中。相对于随机写入,磁盘顺序写具有以下特性:高吞吐量:磁盘顺序写可以在磁盘上连续写入数据,不需要频繁寻道和旋转,因此具有较高的吞吐量。当需要写入大量数据时,采用磁盘顺序写可以更快地完成数据的写入。较低的延迟:磁盘顺序写可以利用磁盘的预取机制,将磁盘上的数据缓存到内存中,减少了磁盘寻道和旋转的时间,因此具
数组进行排序的方法
方案一:使用 Arrays 类中提供的 sort 方法对数组进行排序: public class SortArrayExample { public static void main(String[] args) { int[] arr = { 13, 7, 6, 45, 21, 9, 101, 102 }; Arrays.sort(arr); // 默认按
Flink 类加载机制介绍
类加载分类Java Classpath 类加载:Java 的通用类路径,包括 JDK 库,以及 Flink /lib 目录中的所有代码(Apache Flink 的类和一些依赖),这些都是通过 AppClassLoader 加载Flink Plugin 组件类加载:Flink 的 /plugins 目录下的插件代码,Flink 的插件机制会在启动时动态加载它们动态加载用户代码类:通过 Flin