public String toHtml(int headerDepth, Function<String, String> idGenerator,
                         Map<String, String> dynamicUpdateModes) {
        boolean hasUpdateModes = !dynamicUpdateModes.isEmpty();
        List<ConfigKey> configs = sortedConfigs();
        StringBuilder b = new StringBuilder();
        b.append("<ul class=\"config-list\">\n");
        for (ConfigKey key : configs) {
            if (key.internalConfig) {
                continue;
            }
            b.append("<li>\n");
            b.append(String.format("<h%1$d>" +
                    "<a id=\"%3$s\"></a><a id=\"%2$s\" href=\"#%2$s\">%3$s</a>" +
                    "</h%1$d>%n", headerDepth, idGenerator.apply(key.name), key.name));
            b.append("<p>");
            if (key.documentation != null) {
                b.append(key.documentation.replaceAll("\n", "<br>"));
            }
            b.append("</p>\n");

            b.append("<table>" +
                    "<tbody>\n");
            for (String detail : headers()) {
                if (detail.equals("Name") || detail.equals("Description")) continue;
                if (detail.equals("Default") && key.alternativeString != null) {
                    addConfigDetail(b, detail, key.alternativeString);
                    continue;
                }
                addConfigDetail(b, detail, getConfigValue(key, detail));
            }
            if (hasUpdateModes) {
                String updateMode = dynamicUpdateModes.get(key.name);
                if (updateMode == null)
                    updateMode = "read-only";
                addConfigDetail(b, "Update Mode", updateMode);
            }
            b.append("</tbody></table>\n");
            b.append("</li>\n");
        }
        b.append("</ul>\n");
        return b.toString();
    }
Converts this config into an HTML list that can be embedded into docs.
If <code>dynamicUpdateModes</code> is non-empty, a "Dynamic Update Mode" label
will be included in the config details with the value of the update mode. Default
mode is "read-only".
@param headerDepth The top level header depth in the generated HTML.
@param idGenerator A function for computing the HTML id attribute in the generated HTML from a given config name.
@param dynamicUpdateModes Config name -&gt; update mode mapping.
clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java