diff --git a/README.md b/README.md index 4a2a3b3..e827609 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Flink SQL学习笔记提纲。持续更新。Hive SQL 离线Join VS Flink SQL - [Flink CEP](./basic/CEP.md) - [旁路输出](./basic/旁路输出.md) - +- [Flink Operator Chain](./basic/Flink_Operator_chain.md) # Flink 源码 diff --git a/basic/Flink_Operator_chain.md b/basic/Flink_Operator_chain.md new file mode 100644 index 0000000..420ccc0 --- /dev/null +++ b/basic/Flink_Operator_chain.md @@ -0,0 +1,23 @@ + +## 简介 + +Operator Chain 字面意思就是操作链,在Flink中就是将满足一定条件的Operator放到一个算子里面执行,这样就能有效减少 +算子之间的数据传输,从而达到作业性能优化的目的。 + +例如常见的算子:`source->map->filter` 可以合并到一个算子里面。 + +## Operator Chain + +### 条件 + +- 下游节点的入度为1. +- 上下游节点都在同一个slot group。 +- 前后算子不为空。 +- 上游节点的chain策略为ALWAYS或HEAD(只能与下游下游链接,不能和下游链接,Source默认为HEAD) +- 下游节点和chain策略为ALWAYS(可以与下游链接,map、flatmap、filter等默认是ALWAYS) +- 两个节点之间的物理分区逻辑是ForwardPartitioner +- 两个算子之间的shuffle方式不等于批处理模式。 +- 上下游并行度一致。 +- 用户没有禁用chain: `stream.isChainingEnabled()`或者配置为:`pipeline.operator-chaining=true` + + diff --git a/basic/README.md b/basic/README.md index 9f45e7c..319bb09 100644 --- a/basic/README.md +++ b/basic/README.md @@ -2,6 +2,6 @@ - [旁路输出](./旁路输出.md) - [Flink CEP](./CEP.md) - +- [Flink Operator Chain](./Flink_Operator_chain.md)