Ley*_*Lee 2 apache-flink flink-streaming
例如,有一个密钥流:
val keyedStream: KeyedStream[event, Key] = env
.addSource(...)
.keyBy(...)
// several transformations on the same stream
keyedStream.map(....)
keyedStream.window(....)
keyedStream.split(....)
keyedStream...(....)
Run Code Online (Sandbox Code Playgroud)
我认为这是Flink中相同流的重用,我发现重用它时,流的内容不受其他转换的影响,因此我认为它是同一流的副本。
但我不知道这是否正确。
如果是,这将使用大量资源(哪些资源?)来保存副本?
甲DataStream(或KeyedStream),其上多个运营商施加重复的所有传出消息。例如,如果您有一个程序,例如:
val keyedStream: KeyedStream[event, Key] = env
.addSource(...)
.keyBy(...)
val stream1: DataStream = keyedStream.map(new MapFunc1)
val stream2: DataStream = keyedStream.map(new MapFunc2)
Run Code Online (Sandbox Code Playgroud)
该程序执行为
/-hash-> Map(MapFunc1) -> ...
Source >-<
\-hash-> Map(MapFunc2) -> ...
Run Code Online (Sandbox Code Playgroud)
源复制每个记录,并将其发送给两个下游运算符(MapFunc1和MapFunc2)。运算符的类型(在我们的示例Map中)无关紧要。
这样做的代价是通过网络将每个记录发送两次。如果所有接收操作员都具有相同的并行度,则可以通过发送每个记录一次并在接收任务管理器中将其复制来优化它,但是目前尚未完成。
您可以通过添加一个接收操作符(例如,一个身份映射操作符)和另一个keyBy从您派生到多个接收者的操作来手动优化程序。因为所有记录已经在本地,所以这不会导致网络混乱。但是,所有运算符必须具有相同的并行性。
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |