Source:
<code>public static JobManagerSharedServices fromConfiguration( Configuration config, BlobServer blobServer) throws Exception { checkNotNull(config); checkNotNull(blobServer); final String classLoaderResolveOrder = config.getString(CoreOptions.CLASSLOADER_RESOLVE_ORDER); final String[] alwaysParentFirstLoaderPatterns = CoreOptions.getParentFirstLoaderPatterns(config); final BlobLibraryCacheManager libraryCacheManager = new BlobLibraryCacheManager( blobServer, FlinkUserCodeClassLoaders.ResolveOrder.fromString(classLoaderResolveOrder), alwaysParentFirstLoaderPatterns); final Duration akkaTimeout; try { akkaTimeout = AkkaUtils.getTimeout(config); } catch (NumberFormatException e) { throw new IllegalConfigurationException(AkkaUtils.formatDurationParsingErrorMessage()); } <START> final int poolSize = config.getInteger(ClusterOptions.CLUSTER_IO_EXECUTOR_POOL_SIZE, Hardware.getNumberCPUCores()); Preconditions.checkArgument(poolSize > 0, <END> String.format("Illegal pool size (%s) of io-executor for cluster entry-point, please re-configure '%s'.", poolSize, ClusterOptions.CLUSTER_IO_EXECUTOR_POOL_SIZE.key())); final ScheduledExecutorService futureExecutor = Executors.newScheduledThreadPool( poolSize, new ExecutorThreadFactory("jobmanager-future")); final int numSamples = config.getInteger(WebOptions.BACKPRESSURE_NUM_SAMPLES); final long delayBetweenSamples = config.getInteger(WebOptions.BACKPRESSURE_DELAY); final BackPressureRequestCoordinator coordinator = new BackPressureRequestCoordinator( futureExecutor, akkaTimeout.toMillis() + numSamples * delayBetweenSamples); final int cleanUpInterval = config.getInteger(WebOptions.BACKPRESSURE_CLEANUP_INTERVAL); final BackPressureStatsTrackerImpl backPressureStatsTracker = new BackPressureStatsTrackerImpl( coordinator, cleanUpInterval, config.getInteger(WebOptions.BACKPRESSURE_REFRESH_INTERVAL)); futureExecutor.scheduleWithFixedDelay( backPressureStatsTracker::cleanUpOperatorStatsCache, cleanUpInterval, cleanUpInterval, TimeUnit.MILLISECONDS); return new JobManagerSharedServices( futureExecutor, libraryCacheManager, RestartStrategyFactory.createRestartStrategyFactory(config), coordinator, backPressureStatsTracker, blobServer); }</code><technical_language>Instead of making future executor of JobManager configurable I suggest ioExecutor of ClusterEntrypoint configurable: <LINK_0></technical_language>

Target:
public static JobManagerSharedServices fromConfiguration( Configuration config, BlobServer blobServer) throws Exception { checkNotNull(config); checkNotNull(blobServer); final String classLoaderResolveOrder = config.getString(CoreOptions.CLASSLOADER_RESOLVE_ORDER); final String[] alwaysParentFirstLoaderPatterns = CoreOptions.getParentFirstLoaderPatterns(config); final BlobLibraryCacheManager libraryCacheManager = new BlobLibraryCacheManager( blobServer, BlobLibraryCacheManager.defaultClassLoaderFactory( FlinkUserCodeClassLoaders.ResolveOrder.fromString(classLoaderResolveOrder), alwaysParentFirstLoaderPatterns)); final Duration akkaTimeout; try { akkaTimeout = AkkaUtils.getTimeout(config); } catch (NumberFormatException e) { throw new IllegalConfigurationException(AkkaUtils.formatDurationParsingErrorMessage()); } final ScheduledExecutorService futureExecutor = Executors.newScheduledThreadPool( Hardware.getNumberCPUCores(), new ExecutorThreadFactory("jobmanager-future")); final int numSamples = config.getInteger(WebOptions.BACKPRESSURE_NUM_SAMPLES); final long delayBetweenSamples = config.getInteger(WebOptions.BACKPRESSURE_DELAY); final BackPressureRequestCoordinator coordinator = new BackPressureRequestCoordinator( futureExecutor, akkaTimeout.toMillis() + numSamples * delayBetweenSamples); final int cleanUpInterval = config.getInteger(WebOptions.BACKPRESSURE_CLEANUP_INTERVAL); final BackPressureStatsTrackerImpl backPressureStatsTracker = new BackPressureStatsTrackerImpl( coordinator, cleanUpInterval, config.getInteger(WebOptions.BACKPRESSURE_REFRESH_INTERVAL)); futureExecutor.scheduleWithFixedDelay( backPressureStatsTracker::cleanUpOperatorStatsCache, cleanUpInterval, cleanUpInterval, TimeUnit.MILLISECONDS); return new JobManagerSharedServices( futureExecutor, libraryCacheManager, RestartStrategyFactory.createRestartStrategyFactory(config), coordinator, backPressureStatsTracker, blobServer); }