Streaming Flink SocketTextStream源调度到单个计算机

Streaming Flink SocketTextStream源调度到单个计算机,streaming,apache-flink,flink-streaming,Streaming,Apache Flink,Flink Streaming,我试图弄清楚它是如何发生的:我让一个程序从多个socketTextStream读取,这些文本流馈送到不同的数据流中(这些数据流在我的工作中从未连接)。它看起来类似于以下内容: for(int i=0;i

我试图弄清楚它是如何发生的:我让一个程序从多个socketTextStream读取,这些文本流馈送到不同的数据流中(这些数据流在我的工作中从未连接)。它看起来类似于以下内容:

for(int i=0;i
然而,当我在集群上运行作业时,我发现所有源任务都已调度到一台机器上,因此该机器成为性能的严重瓶颈。你知道这是怎么发生的吗


谢谢

所有不同的
SocketTextStreamFunction
源被调度到同一台机器的原因是插槽共享。插槽共享允许Flink将属于不同操作员的任务调度到同一插槽中。例如,这允许在相互依赖的任务(例如,构建端、探测端和在同一插槽中运行的实际连接操作符)之间实现更好的协作。此外,它还可以更容易地推断应用程序需要多少插槽,这是作业的最大并行性

但是,缺点是作业的独立组件不会分布在集群中,但由于插槽共享,通常会在同一个插槽中结束(因此也在同一台机器上)

如果显式设置不同的插槽共享组名称,则可以禁用部分作业的插槽共享。然后,只有分配给同一插槽共享组的操作员才能进行插槽共享。下游操作员从其输入继承插槽共享组。因此,如果您有一个令人尴尬的并行作业,那么仅在源位置设置插槽共享组就足够了

for(int i=0;i
将所有不同的
SocketTextStreamFunction
源调度到同一台机器的原因是插槽共享。插槽共享允许Flink将属于不同操作员的任务调度到同一插槽中。例如,这允许在相互依赖的任务(例如,构建端、探测端和在同一插槽中运行的实际连接操作符)之间实现更好的协作。此外,它还可以更容易地推断应用程序需要多少插槽,这是作业的最大并行性

但是,缺点是作业的独立组件不会分布在集群中,但由于插槽共享,通常会在同一个插槽中结束(因此也在同一台机器上)

如果显式设置不同的插槽共享组名称,则可以禁用部分作业的插槽共享。然后,只有分配给同一插槽共享组的操作员才能进行插槽共享。下游操作员从其输入继承插槽共享组。因此,如果您有一个令人尴尬的并行作业,那么仅在源位置设置插槽共享组就足够了

for(int i=0;i
我对socketTextStream没有太多的干扰,所以我只能推荐一个方向。使用kafka主题作为数据源(env.addSource(FlinkKafkaConsumer))时,如果集群只有一个分区,则从kafka数据源接收的所有数据将只发送到一台计算机。所以,如果我的并行度为3,那么数据将只流经其中一台机器(请确保这就是您所说的仅流经一台机器的意思)。听起来这是一个类似的事情,只是使用了不同类型的数据源。我没有太多地使用socketTextStream,所以我只能推荐一个研究方向。使用kafka主题作为数据源(env.addSource(FlinkKafkaConsumer))时,如果集群只有一个分区,则从kafka数据源接收的所有数据将只发送到一台计算机。所以,如果我的并行度为3,那么数据将只流经其中一台机器(请确保这就是您所说的仅流经一台机器的意思)。听起来这是一个类似的事情,只是数据源不同。Hi-Till,
SlotShareingGroup
方法在批处理模式下也可用吗?Hi-Till,
SlotShareingGroup
方法在批处理模式下也可用吗?