<a id="splunk-sink-connector-changelog"></a>

# Changelog for Splunk Sink Connector for Confluent Platform

<style>
.rss-feed-box {
    /\* --cf-surface-01 is white in light mode and a neutral dark surface in
       dark mode (see confluent.css), so unlike a raw palette color this
       needs no explicit [data-theme="dark"] override to read correctly in
       both themes. \*/
    background-color: var(--cf-surface-01);
    border: 1px solid var(--cf-border-subtle);
    border-radius: var(--cf-radius-md);
    padding: 16px 20px;
    margin: 20px 0;
    display: flex;
    align-items: flex-start;
    gap: 16px;
}
.rss-icon {
    width: 24px;
    height: 24px;
    background-color: var(--color-orange-40);
    border-radius: var(--cf-radius-sm);
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    flex-shrink: 0;
    transform: rotate(90deg);
}
.rss-icon svg {
    width: 24px;
    height: 24px;
    fill: var(--cf-text-on-color);
}
.rss-feed-rest {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.rss-content {
    color: var(--cf-text-primary);
    font-size: 14px;
    line-height: 1.5;
}
.rss-feed-url-container {
    display: flex;
    align-items: center;
    gap: 8px;
    /\* Explicit hex/palette pair (not a semantic --cf-\* token) because the
       code-block shade here is intentionally lighter/darker than
       --cf-surface-01 above, to read as a distinct "code" region nested
       inside the neutral box. Raw palette tokens don't flip with the theme
       on their own - same explicit [data-theme="dark"] override
       confluent.css uses for its .rst-content note/tip admonitions. \*/
    background-color: var(--color-neutral-10);
    border-radius: var(--cf-radius-sm);
    padding: 10px 14px;
}
[data-theme="dark"] .rss-feed-url-container {
    background-color: var(--color-neutral-80);
}
.rss-feed-url {
    font-family: var(--cf-font-family-mono);
    font-size: 13px;
    color: var(--cf-text-primary);
    word-break: break-all;
    flex: 1;
}
.copy-button {
    background-color: transparent;
    border: none;
    border-radius: var(--cf-radius-sm);
    color: var(--cf-interactive-input);
    cursor: pointer;
    padding: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: background-color 0.2s ease, color 0.2s ease;
}
.copy-button:hover {
    background-color: var(--cf-border-subtle);
}
.copy-button:active {
    transform: scale(0.92);
}
.copy-button.copied {
    color: var(--cf-support-success);
}
.copy-icon {
    width: 16px;
    height: 16px;
    fill: currentColor;
}
.copy-button .icon-check {
    display: none;
}
.copy-button.copied .icon-copy {
    display: none;
}
.copy-button.copied .icon-check {
    display: block;
}
.external-link-icon {
    display: inline-block;
    width: 12px;
    height: 12px;
    margin-left: 4px;
    vertical-align: middle;
}
.rss-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
</style>

<div class="rss-feed-box">
   <div class="rss-icon"><svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M200-120q-33 0-56.5-23.5T120-200q0-33 23.5-56.5T200-280q33 0 56.5 23.5T280-200q0 33-23.5 56.5T200-120Zm480 0q0-117-44-218.5T516-516q-76-76-177.5-120T120-680v-120q142 0 265 53t216 146q93 93 146 216t53 265H680Zm-240 0q0-67-25-124.5T346-346q-44-44-101.5-69T120-440v-120q92 0 171.5 34.5T431-431q60 60 94.5 139.5T560-120H440Z"/></svg></div>
   <div class="rss-feed-rest">
        <div class="rss-content">
            To get the latest product updates delivered to you in an RSS feed, add the URL of this page to your <a href="https://en.wikipedia.org/wiki/News_aggregator" target="_blank" rel="noopener">feed reader<svg class="external-link-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg></a> or add the feed's URL directly
        </div>
        <div class="rss-feed-url-container">
            <div class="rss-feed-url" id="rss-feed-url">https://docs.confluent.io/kafka-connectors/splunk-sink/2.2/changelog.xml</div>
            <button class="copy-button" onclick="copyRssUrl()" aria-label="Copy RSS feed URL">
                <svg class="copy-icon icon-copy" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg>
                <svg class="copy-icon icon-check" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg>
                <span class="rss-sr-only copy-text">Copy</span>
            </button>
        </div>
   </div>
</div>

<script>
function copyRssUrl() {
    const url = 'https://docs.confluent.io/kafka-connectors/splunk-sink/2.2/changelog.xml';
    const button = event.currentTarget;
    const copyText = button.querySelector('.copy-text');

    // Use modern Clipboard API if available
    if (navigator.clipboard && navigator.clipboard.writeText) {
        navigator.clipboard.writeText(url).then(function() {
            button.classList.add('copied');
            copyText.textContent = 'Copied!';
            setTimeout(function() {
                button.classList.remove('copied');
                copyText.textContent = 'Copy';
            }, 2000);
        }).catch(function(err) {
            console.error('Failed to copy: ', err);
            fallbackCopy(url, button, copyText);
        });
    } else {
        fallbackCopy(url, button, copyText);
    }
}

function fallbackCopy(text, button, copyText) {
    // Fallback for older browsers
    const textArea = document.createElement('textarea');
    textArea.value = text;
    textArea.style.position = 'fixed';
    textArea.style.opacity = '0';
    document.body.appendChild(textArea);
    textArea.select();
    try {
        document.execCommand('copy');
        button.classList.add('copied');
        copyText.textContent = 'Copied!';
        setTimeout(function() {
            button.classList.remove('copied');
            copyText.textContent = 'Copy';
        }, 2000);
    } catch (err) {
        console.error('Fallback copy failed: ', err);
    }
    document.body.removeChild(textArea);
}
</script>

## Version 2.2.7

* Rejected non-HTTPS HEC endpoints by default in new connector configurations; disable via `splunk.hec.ssl.enforced=false` if needed.
* Fixed an issue where SSL options were ignored when creating a connector with Kerberos.
* Fixed a denial-of-service vulnerability caused by an unbounded retry loop.
* Upgraded `jackson-databind` from version 2.18.6 to 2.22.1.
* Added a timeout to timestamp regex matching.

## Version 2.2.6

* Upgraded plexus-utils from 3.0.24 to 4.0.3 to fix CVE
* Upgraded log4j-core from 2.25.3 to 2.25.4 to fix CVE

## Version 2.2.5

* Fixed security vulnerabilities in `org.apache.avro:avro`, `org.apache.logging.log4j:log4j-core` and `org.lz4:lz4-java`.
* Upgraded Jackson Core from 2.15.0 to 2.18.6

## Version 2.2.4

* Fixed CVEs

## Version 2.2.3

* Added support for parsing array in HEC formatted messages

## Version 2.2.2

* Fixed record tracker that did not support the concurrent removal of event batches
* Fixed wrong topic to index mapping in case of white spaces

## Version 2.2.1

* Disabled mandatory field validation if validation is disabled
* Recorded errors in configuration
* Fixed CVE-2023-3635 CVE-2024-25710 CVE-2024-26308

## Version 2.2.0

* Added auto-extract timestamp parameter support
* Fixed potential `NullPointerException` for Kafka headers with null value
* Fixed unit test cases and increase coverage

## Version 2.1.2

* Made queue capacity configurable.
* Added a `timestamp.timezone` configuration in `SplunkSinkConnectorConfig`.
* Updated dependencies to clear vulnerabilities.

## Version 2.1.1

* Fixed URI validator bug with the new configuration validation.
* Added a new configuration parameter for disabling splunk validations.

## Version 2.1.0

* Made truststore type configurable.
* Bumped `jackson-databind` from 2.12.6.1 to 2.12.7.1.
* Validated Splunk configuration before creating task.
* Bumped `protobuf-java` version to 3.21.7.
* Added support for record key extraction.
