public static void initializeBootstrapProperties(
        OptionParser parser,
        OptionSet options,
        Properties properties,
        OptionSpec<String> bootstrapServer,
        OptionSpec<String> bootstrapControllers
    ) {
        try {
            initializeBootstrapProperties(properties,
                options.has(bootstrapServer) ?
                    Optional.of(options.valueOf(bootstrapServer)) : Optional.empty(),
                options.has(bootstrapControllers) ?
                        Optional.of(options.valueOf(bootstrapControllers)) : Optional.empty());
        } catch (InitializeBootstrapException e) {
            printUsageAndExit(parser, e.getMessage());
        }
    }
Merge the options into {@code props} for key {@code key}, with the following precedence, from high to low:
1) if {@code spec} is specified on {@code options} explicitly, use the value;
2) if {@code props} already has {@code key} set, keep it;
3) otherwise, use the default value of {@code spec}.
A {@code null} value means to remove {@code key} from the {@code props}.
server-common/src/main/java/org/apache/kafka/server/util/CommandLineUtils.java