Code review comment: > Perhaps we should worry more about how many tasks can concurrently access HMS, than how often they access.  Maybe we need introduce a new mechanism the source can notify the all join subtask when to update in Flink SQL

Code under review:
private void validateLookupConfigurations() {
		String partitionInclude = configuration.get(STREAMING_SOURCE_PARTITION_INCLUDE);
		if (isStreamingSource()) {
			Preconditions.checkArgument(
					!configuration.contains(STREAMING_SOURCE_CONSUME_START_OFFSET),
					String.format(
							"The '%s' is not supported when set '%s' to 'latest'",
							STREAMING_SOURCE_CONSUME_START_OFFSET.key(),
							STREAMING_SOURCE_PARTITION_INCLUDE.key()));

			Duration monitorInterval = configuration.get(STREAMING_SOURCE_MONITOR_INTERVAL) == null
					? DEFAULT_LOOKUP_MONITOR_INTERVAL
					: configuration.get(STREAMING_SOURCE_MONITOR_INTERVAL);

			if (monitorInterval.toMillis() < DEFAULT_LOOKUP_MONITOR_INTERVAL.toMillis()) {
				LOG.warn(String.format(
					"Currently the recommended value of '%s' is bigger than default value '%s' " +
						"when set '%s' to 'latest', but actual is '%s', this may produce big pressure to hive metastore.",
					STREAMING_SOURCE_MONITOR_INTERVAL.key(),
					DEFAULT_LOOKUP_MONITOR_INTERVAL.toMillis(),
					STREAMING_SOURCE_PARTITION_INCLUDE.key(),
					monitorInterval.toMillis()));
			}

			hiveTableReloadInterval = monitorInterval;
		} else {
			Preconditions.checkArgument(
					"all".equals(partitionInclude),
					String.format("The only supported %s for lookup is '%s' in batch source," +
							" but actual is '%s'", STREAMING_SOURCE_PARTITION_INCLUDE.key(), "all", partitionInclude));

			hiveTableReloadInterval = configuration.get(LOOKUP_JOIN_CACHE_TTL);
		}
	}

Line commented on: "Currently the recommended value of '%s' is bigger than default value '%s' " +

Revised code:
private void validateLookupConfigurations() {
		String partitionInclude = configuration.get(STREAMING_SOURCE_PARTITION_INCLUDE);
		if (isStreamingSource()) {
			Preconditions.checkArgument(
					!configuration.contains(STREAMING_SOURCE_CONSUME_START_OFFSET),
					String.format(
							"The '%s' is not supported when set '%s' to 'latest'",
							STREAMING_SOURCE_CONSUME_START_OFFSET.key(),
							STREAMING_SOURCE_PARTITION_INCLUDE.key()));

			Duration monitorInterval = configuration.get(STREAMING_SOURCE_MONITOR_INTERVAL) == null
					? DEFAULT_LOOKUP_MONITOR_INTERVAL
					: configuration.get(STREAMING_SOURCE_MONITOR_INTERVAL);

			if (monitorInterval.toMillis() < DEFAULT_LOOKUP_MONITOR_INTERVAL.toMillis()) {
				LOG.warn(String.format(
					"Currently the recommended value of '%s' is at least '%s' when set '%s' to 'latest'," +
						" but actual is '%s', this may produce big pressure to hive metastore.",
					STREAMING_SOURCE_MONITOR_INTERVAL.key(),
					DEFAULT_LOOKUP_MONITOR_INTERVAL.toMillis(),
					STREAMING_SOURCE_PARTITION_INCLUDE.key(),
					monitorInterval.toMillis()));
			}

			hiveTableReloadInterval = monitorInterval;
		} else {
			Preconditions.checkArgument(
					"all".equals(partitionInclude),
					String.format("The only supported %s for lookup is '%s' in batch source," +
							" but actual is '%s'", STREAMING_SOURCE_PARTITION_INCLUDE.key(), "all", partitionInclude));

			hiveTableReloadInterval = configuration.get(LOOKUP_JOIN_CACHE_TTL);
		}
	}