我试图弄清楚它是如何发生的:我正在从多个socketTextStream读取一个程序,这些文本流会输入不同的数据流(这些数据流永远不会在我的工作中连接)。它看起来类似于下面的内容:
<form class="w3-container " >
<h4>price</h4>
<div>
<input name= "priceLow" [(ngModel)]="SearchParams.PriceLow" placeholder="low cost">
تا
<input name= "priceHigh" [(ngModel)]="SearchParams.PriceHigh" placeholder="High cost">
</div>
<h4>Meter</h4>
<div>
<input name= "MeterLow" [(ngModel)]="SearchParams.MeterLow" placeholder="smallest">
تا
<input name= "MeterHigh" [(ngModel)]="SearchParams.MeterHigh" placeholder="Highest">
</div>
<div >
<h4>type</h4>
<md-checkbox style="width:50%" name=" 1 " [(ngModel)]="SearchParams.HouseSelected">House</md-checkbox>
<md-checkbox style="width:50%" name=" 2 " [(ngModel)]="SearchParams.ApartementSelected">apartment</md-checkbox>
</div>
<h4>room Number/h4>
<md-radio-group name="numberOfRooms" [(ngModel)]="SearchParams.NumOfRooms">
<md-radio-button class="example-margin" value="1">1</md-radio-button>
<md-radio-button class="example-margin" value="2">2</md-radio-button>
<md-radio-button class="example-margin" value="3">3</md-radio-button>
<md-radio-button class="example-margin" value="4">3+</md-radio-button>
</form>
</div>
</div>
<div>
<app-results [SearchParams] = "this.SearchParams"></app-results>
</div>
但是,当我在群集上运行作业时,我发现所有源任务都已安排到一台机器上,因此机器成为性能的严重瓶颈。任何想法会如何发生?
谢谢!
答案 0 :(得分:0)
将所有不同SocketTextStreamFunction
来源安排到同一台计算机的原因是因为广告位共享。插槽共享允许Flink将属于不同运营商的任务安排到同一个插槽中。例如,这允许在彼此依赖的任务之间实现更好的共置(例如,在同一时隙中运行的构建侧,探测侧和实际连接操作符)。此外,它可以更容易地推断出您的应用程序需要多少个插槽,这是您工作的最大并行度。
但是,缺点是作业的独立组件不会分散在群集中,但由于插槽共享,通常最终会在同一个插槽中(因此也会在同一台计算机上)。
如果您明确设置了其他插槽共享组名称,则可以禁用部分作业的插槽共享。然后,只有分配给相同插槽共享组的运营商才能进行插槽共享。下游运营商从其输入继承插槽共享组。因此,如果你有一个令人尴尬的并行工作,那么只需在源头设置插槽共享组即可。
for(int i =0; i< hosts.length; i++) {
DataStream<String> someStream = env
.socketTextStream(hosts[i], ports[i])
.slotSharingGroup("socket_" + i);
DataStream<Tuple2<String, String>> joinedAdImpressions = rawMessageStream.rebalance() ...
}