{% include code-style-navbar.zh.md %}
{% toc %}
关于特定组件更改的附加指南。
配置选项应该放在哪里?
‘flink-conf.yaml’: 所有属于可能要跨作业标准的执行行为的配置。可以将其想像成 Ops 的工作人员或为其他团队提供流处理平台的工作人员设置的参数。
‘ExecutionConfig’: 执行期间算子需要特定于单个 Flink 应用程序的参数,典型的例子是水印间隔,序列化参数,对象重用。
ExecutionEnvironment (在代码里): 所有特定于单个 Flink 应用程序的东西,仅在构建程序/数据流时需要,在算子执行期间不需要。
如何命名配置键:
配置键名应该分层级。将配置视为嵌套对象(JSON 样式)
taskmanager: { jvm-exit-on-oom: true, network: { detailed-metrics: false, request-backoff: { initial: 100, max: 10000 }, memory: { fraction: 0.1, min: 64MB, max: 1GB, buffers-per-channel: 2, floating-buffers-per-gate: 16 } } }
因此生成的配置键应该:
不是 "taskmanager.detailed.network.metrics"
而是 "taskmanager.network.detailed-metrics"
连接器历来很难实现,需要处理多线程、并发和检查点等许多方面。
作为 FLIP-27 的一部分,我们正在努力使数据源(source)的实现更简单。新的数据源应该不必处理并发/线程和检查点的任何方面。
预计在不久的将来,会有类似针对数据汇(sink)的 FLIP。
示例应该是自包含的,不需要运行 Flink 以外的系统。除了显示如何使用具体的连接器的示例,比如 Kafka 连接器。数据源/数据汇可以使用 StreamExecutionEnvironment.socketTextStream
,这个不应该在生产中使用,但对于研究示例如何运行是相当方便的,以及基于文件的数据源/数据源。(对于流,Flink 提供了连续的文件数据源读取数据) 示例也不应该是纯粹的玩具示例,而是在现实世界的代码和纯粹的抽象示例之间取得平衡。WordCount 示例到现在已经很久了,但它是一个很好的功能突出并可以做有用事情的简单代码示例。
示例中应该有不少的注释。他们可以在类级 Javadoc 中描述示例的总体思路,并且描述正在发生什么和整个代码里使用了什么功能。还应描述预期的输入数据和输出数据。
示例应该包括参数解析,以便你可以运行一个示例(使用 bin/flink run path/to/myExample.jar --param1 … --param2
运行程序)。
SQL 标准应该是事实的主要来源。
讨论与标准或厂商特定解释的差异。
将 Table API 视为 SQL 和 Java/Scala 编程世界之间的桥梁。
SHIFT_LEFT
函数时,确保贡献足够通用,不仅适用于 INT
也适用于 BIGINT
或 TINYINT
。测试为空性
NULL
,并具有 3 值布尔逻辑。尽量避免集成测试
不要在次要版本中引入物理计划更改!
在设计接口时要牢记 Java。