Skip to main content

概述

Splunk Sink Connector 消费 Kafka Topic 中的记录,并通过 Splunk HTTP Event Collector(HEC)将记录写入 Splunk。它位于 Kafka 与 Splunk 之间,适合把应用日志、审计事件、指标明细和业务事件持续送入 Splunk,以便检索、分析和告警。 Connector 默认使用 HEC /event 端点,将记录值包装为事件,并可为不同 Topic 设置 index、source 和 sourcetype。也可以切换到 /raw 端点发送原始内容,或通过 Kafka Header 动态覆盖 Splunk 元数据。任务会批量发送记录;默认未启用 HEC 确认时,成功的 HTTP 响应用于判定批次完成,启用确认后则等待 Splunk 返回对应的 indexer acknowledgement 再推进 Kafka Offset。故障恢复仍可能重放尚未提交的记录,因此下游应允许重复事件。

前置条件

  • Splunk 已启用 HEC,并准备可用的 HEC URI 和 Token;Token 对默认或显式配置的 index 具有写入权限。
  • 使用 HTTPS 并校验证书时,每个可能运行 Task 的 Worker 都能读取包含所需 CA 链的信任库文件。
  • 启用 HEC 确认时,Splunk 中对应 Token 已启用 indexer acknowledgement。

授权许可

使用 Apache License 2.0。

快速开始

提前准备 Connect Cluster、Kafka 输入 Topic 和 Splunk HEC,确认网络连通、Token 权限以及 Worker 对信任库的读取权限;创建和管理操作参见管理 Connector。以下配置使用 HTTPS /event 端点,并由 HEC Token 的默认设置决定 index、source 和 sourcetype。
替换输入 Topic、HEC 地址、Token 和 Worker 本地信任库信息。信任库默认类型为 JKS;使用其他受 JVM 支持的类型时添加 splunk.hec.ssl.trust.store.type。Token 和信任库密码应通过受控的配置管理方式提供。示例继承 Worker 的 Converter,实际记录编码不一致时应显式配置 key.convertervalue.converter

配置

HEC 连接与身份认证

splunk.hec.token

访问 Splunk HEC 的 Token。
  • 类型password
  • 默认值:无,必填
  • 重要级别:高
  • 有效值 / 注意事项:使用已启用且有权写入目标 index 的 Token;按敏感配置管理,不写入日志或共享示例。

splunk.hec.uri

Splunk HEC 基础 URI。
  • 类型string
  • 默认值:无,必填
  • 重要级别:高
  • 有效值 / 注意事项:可使用逗号分隔多个 HTTP 或 HTTPS URI;默认强制 HTTPS。避免在 URI 项目前后加入空白。

splunk.validation.disable

控制 Connector 配置校验时是否跳过对 Splunk 的实时请求。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项false 会使用第一个 HEC URI 对配置的 index 发送校验事件;true 仅跳过该远程校验,不跳过必填项、URI、Kerberos 或 Task 配置检查。

kerberos.user.principal

用于 HEC HTTP 请求的 Kerberos Principal。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:启用 Kerberos 时必须与 kerberos.keytab.path 同时设置;Kerberos 不替代 HEC Token。

kerberos.keytab.path

Kerberos Keytab 的 Worker 本地路径。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:启用 Kerberos 时必须与 kerberos.user.principal 同时设置,并确保每个 Task 所在 Worker 可读取该文件。

TLS 安全

splunk.hec.ssl.enforced

控制是否强制 HEC URI 使用 HTTPS。
  • 类型boolean
  • 默认值true
  • 重要级别:高
  • 有效值 / 注意事项true 拒绝 HTTP;设为 false 仍只接受 HTTP 或 HTTPS。使用 HTTP 会明文传输事件和 Token。

splunk.hec.ssl.validate.certs

控制 HTTPS 连接是否校验证书和主机名。
  • 类型boolean
  • 默认值true
  • 重要级别:中
  • 有效值 / 注意事项:保持 true 时必须配置非空的 splunk.hec.ssl.trust.store.path;仅在受控诊断或明确接受风险时关闭。

splunk.hec.ssl.trust.store.path

用于校验 Splunk 证书的信任库文件路径。
  • 类型string
  • 默认值:空字符串
  • 重要级别:高
  • 有效值 / 注意事项:HTTPS 且启用证书校验时必填;路径必须对每个 Task 进程可见且可读。

splunk.hec.ssl.trust.store.type

信任库类型。
  • 类型string
  • 默认值JKS
  • 重要级别:低
  • 有效值 / 注意事项:常见值包括 JKSPKCS12,实际支持范围取决于 JVM 安全提供程序。

splunk.hec.ssl.trust.store.password

加载信任库所需的密码。
  • 类型password
  • 默认值:空字符串
  • 重要级别:高
  • 有效值 / 注意事项:按信任库实际设置填写并作为敏感配置管理;空字符串是 ConfigDef 默认值。

端点与事件格式

splunk.hec.raw

选择 HEC /raw/event 端点。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项false 使用 JSON /eventtrue 使用 /raw,此时元数据按整个请求批次应用,事件字段增强和自定义 Header 字段不适用。

splunk.hec.raw.line.breaker

/raw 模式的每条记录追加分隔符。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:仅在 splunk.hec.raw=true 时使用,并应与 Splunk sourcetype 的换行和事件切分规则一致。

splunk.hec.json.event.formatted

尝试把记录值解析为完整的 HEC JSON Event 对象。
  • 类型boolean
  • 默认值false
  • 重要级别:低
  • 有效值 / 注意事项:仅用于 /event;解析失败时记录值会回退为普通事件内容,而不是保持预格式化对象语义。

Splunk 元数据路由

splunk.indexes

为显式订阅的 Topic 指定 Splunk index。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:空值使用 HEC Token 默认 index;可提供一个值供所有 Topic 共用,或按 topics 顺序提供等数量的逗号分隔值。topics.regex 不支持这种位置映射。

splunk.sources

为显式订阅的 Topic 指定 Splunk source。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:可提供一个共用值,或按 topics 顺序提供等数量的逗号分隔值;空值使用 HEC 默认设置,topics.regex 不支持位置映射。

splunk.sourcetypes

为显式订阅的 Topic 指定 Splunk sourcetype。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:可提供一个共用值,或按 topics 顺序提供等数量的逗号分隔值;空值使用 HEC 默认设置,topics.regex 不支持位置映射。

Kafka Header 映射

splunk.header.support

启用 Kafka Header 到 Splunk 元数据和字段的映射。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:启用后,配置的 Header 可覆盖 index、host、source 和 sourcetype;/raw 会按这四类元数据对记录分组。

splunk.header.custom

指定写入 /event 字段的自定义 Kafka Header 名称。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:使用逗号分隔 Header 名称,需同时启用 splunk.header.support;不用于 /raw 的索引字段。

splunk.header.index

指定覆盖 Splunk index 的 Kafka Header 名称。
  • 类型string
  • 默认值splunk.header.index
  • 重要级别:中
  • 有效值 / 注意事项:仅在 splunk.header.support=true 时使用,存在多个同名 Header 时使用最后一个值。

splunk.header.source

指定覆盖 Splunk source 的 Kafka Header 名称。
  • 类型string
  • 默认值splunk.header.source
  • 重要级别:中
  • 有效值 / 注意事项:仅在 splunk.header.support=true 时使用,Header 值会转换为字符串。

splunk.header.sourcetype

指定覆盖 Splunk sourcetype 的 Kafka Header 名称。
  • 类型string
  • 默认值splunk.header.sourcetype
  • 重要级别:中
  • 有效值 / 注意事项:仅在 splunk.header.support=true 时使用,Header 值会转换为字符串。

splunk.header.host

指定覆盖 Splunk host 的 Kafka Header 名称。
  • 类型string
  • 默认值splunk.header.host
  • 重要级别:中
  • 有效值 / 注意事项:仅在 splunk.header.support=true 时使用,Header 值会转换为字符串。

事件字段与时间

splunk.hec.json.event.enrichment

/event 记录添加固定字段。
  • 类型string
  • 默认值:空字符串
  • 重要级别:低
  • 有效值 / 注意事项:使用逗号分隔的 key=value 项;每项必须恰好形成非空键和值,重复键以后出现的值为准。不适用于 /raw

splunk.hec.track.data

/event 添加 Kafka 位置和记录跟踪字段。
  • 类型boolean
  • 默认值false
  • 重要级别:低
  • 有效值 / 注意事项:可能包含 Topic、分区、Offset、时间戳、记录 key 和 Connect 主机信息;启用前评估敏感数据暴露。

splunk.hec.use.record.timestamp

使用 Kafka 记录时间戳作为普通 /event 事件时间。
  • 类型boolean
  • 默认值true
  • 重要级别:中
  • 有效值 / 注意事项:正则提取时间启用并成功时可覆盖该时间;不用于 /raw 或已成功解析的预格式化事件。

splunk.hec.auto.extract.timestamp

控制是否向 HEC 请求附加 auto_extract_timestamp 参数。
  • 类型boolean
  • 默认值null
  • 重要级别:低
  • 有效值 / 注意事项null 表示不发送该参数;显式设置 truefalse 会将对应值交给 HEC。它与 Connector 的正则时间提取相互独立。

enable.timestamp.extraction

启用 Connector 侧的事件时间正则提取。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:仅用于普通 /event;启用时必须设置包含命名组 timetimestamp.regex,并配置适用的时间格式。

timestamp.regex

从事件文本中提取时间值的 Java 正则表达式。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:启用提取时必须包含 (?<time>...) 命名组;表达式针对事件的字符串表示执行。

timestamp.regex.timeout.ms

单条记录执行时间正则表达式的超时。
  • 类型int
  • 默认值500
  • 重要级别:中
  • 有效值 / 注意事项:单位毫秒,最小值为 1;超时后保留此前已有的事件时间。

timestamp.format

解析正则提取值的时间格式。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:提取 Unix Epoch 时使用 epoch;其他值按 Java SimpleDateFormat 模式解析。启用提取时应显式设置。

timestamp.timezone

解析非 Epoch 时间时使用的时区。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:使用有效的 Java 时区 ID;仅在正则提取和非 Epoch 格式下生效。

HEC 确认与重试

splunk.hec.ack.enabled

启用 Splunk HEC indexer acknowledgement 轮询。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:启用前必须为 HEC Token 开启 indexer acknowledgement。关闭时,成功的 HTTP 响应即用于判定批次完成,但不表示事件已经持久化并可检索;默认值以 ConfigDef 的 false 为准。

splunk.hec.event.timeout

等待 HEC 确认的超时时间。
  • 类型int
  • 默认值300
  • 重要级别:中
  • 有效值 / 注意事项:单位秒,仅在 splunk.hec.ack.enabled=true 时使用;应设置为适合 HEC 处理延迟的正值。

splunk.hec.ack.poll.interval

轮询 HEC 确认状态的间隔。
  • 类型int
  • 默认值10
  • 重要级别:中
  • 有效值 / 注意事项:单位秒,仅在 HEC 确认启用时使用;线程调度要求可用的正值。

splunk.hec.ack.poll.threads

轮询 HEC 确认状态的线程数。
  • 类型int
  • 默认值2
  • 重要级别:中
  • 有效值 / 注意事项:仅在 HEC 确认启用时使用,应配置正整数;默认值以 ConfigDef 的 2 为准。

splunk.hec.max.outstanding.events

限制尚未完成的在途事件数量。
  • 类型int
  • 默认值1000000
  • 重要级别:中
  • 有效值 / 注意事项:达到阈值会触发反压和可重试异常;结合单条记录大小、批量、确认延迟和 Worker 内存设置正值。

splunk.hec.max.retries

控制 Connector 对失败批次的内部重试次数。
  • 类型int
  • 默认值5
  • 重要级别:中
  • 有效值 / 注意事项:正值限制失败批次的重试计数;在此实现中,0 或负值不会进入次数上限条件,表现为不限次数。它不同于 Kafka Connect 框架的 errors.retry.timeout

splunk.hec.backoff.threshhold.seconds

设置 HEC 通道失败后的反压时长。
  • 类型int
  • 默认值60
  • 重要级别:中
  • 有效值 / 注意事项:单位秒;配置名中的 threshhold 是公开键名的既有拼写,必须原样使用。

批量、并发与传输

splunk.hec.max.batch.size

设置单个 HEC 批次的最大记录数。
  • 类型int
  • 默认值500
  • 重要级别:中
  • 有效值 / 注意事项:按记录数而非字节数计算;ConfigDef 默认值为 500。应使用正值,并结合单条事件大小和 HEC 请求限制调整。

splunk.flush.window

设置批量发送的时间窗口。
  • 类型int
  • 默认值30
  • 重要级别:低
  • 有效值 / 注意事项:单位秒;达到批量记录数或在后续记录到达时观察到窗口经过会触发发送。仅正值会替换内部窗口。

splunk.hec.threads

设置每个 Task 内部发送 HEC 批次的线程数。
  • 类型int
  • 默认值1
  • 重要级别:低
  • 有效值 / 注意事项:大于 1 启用并发发送和有界队列;它不同于 tasks.max,提高该值可能改变批次完成顺序。

splunk.hec.concurrent.queue.capacity

设置并发 HEC 发送队列的批次数容量。
  • 类型int
  • 默认值100
  • 重要级别:低
  • 有效值 / 注意事项:必须大于 0;主要在 splunk.hec.threads>1 时承载待发送批次。

splunk.hec.total.channels

设置每个 Task 使用的 HEC 通道总量。
  • 类型int
  • 默认值2
  • 重要级别:高
  • 有效值 / 注意事项:应使用正值;与多个 URI 和多个 HEC 线程共同决定通道分配,不等同于 Task 数量。

splunk.hec.max.http.connection.per.channel

设置每个目标的 HTTP 连接池上限。
  • 类型int
  • 默认值2
  • 重要级别:中
  • 有效值 / 注意事项:应使用正值;总连接池还会受 HEC URI 数量影响。

splunk.hec.http.keepalive

控制 HEC HTTP 连接是否使用 Keep-Alive。
  • 类型boolean
  • 默认值true
  • 重要级别:中
  • 有效值 / 注意事项truefalse;通常保持启用以复用连接。

splunk.hec.socket.timeout

设置 HEC 客户端声明的 Socket 超时时间。
  • 类型int
  • 默认值60
  • 重要级别:低
  • 有效值 / 注意事项:单位秒;使用正值并结合网络和 HEC 响应时间评估。

splunk.hec.lb.poll.interval

设置 HEC URI 健康检查间隔。
  • 类型int
  • 默认值120
  • 重要级别:低
  • 有效值 / 注意事项:单位秒;小于或等于 0 会关闭带外健康检查。

splunk.hec.enable.compression

控制 HEC 请求实体是否使用 Gzip 压缩。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:同时适用于 /event/raw;可减少网络传输量,但会增加 Worker 与 Splunk 的压缩处理开销。

Kafka Connect 身份、订阅与转换

connector.class

指定 Connector 实现类。
  • 类型string
  • 默认值:无,必填
  • 重要级别:高
  • 有效值 / 注意事项:使用 com.splunk.kafka.connect.SplunkSinkConnector

tasks.max

设置 Connector 可创建的最大 Task 数量。
  • 类型int
  • 默认值1
  • 重要级别:高
  • 有效值 / 注意事项:最小值为 1;有效并行度还受输入 Topic 分区数限制。每个 Task 具有独立的 HEC 客户端和内部线程。

tasks.max.enforce

控制 Kafka Connect 是否强制 Connector 遵守 tasks.max
  • 类型boolean
  • 默认值true
  • 重要级别:低
  • 有效值 / 注意事项:此项已弃用并计划在未来主版本移除;保持 true 并通过 tasks.max 管理任务数,没有同名替代属性。

topics

指定 Connector 消费的 Kafka Topic。
  • 类型list
  • 默认值:空列表
  • 重要级别:高
  • 有效值 / 注意事项:使用逗号分隔,必须与 topics.regex 二选一。使用位置对应的 splunk.indexessplunk.sourcessplunk.sourcetypes 时必须选择本项。

topics.regex

使用正则表达式订阅 Kafka Topic。
  • 类型string
  • 默认值:空字符串
  • 重要级别:高
  • 有效值 / 注意事项:必须是有效 Java 正则表达式,并与 topics 二选一;不能使用位置对应的 Splunk 元数据列表,应改用 HEC 默认值或 Kafka Header。

key.converter

指定记录 key 的 Kafka Connect Converter。
  • 类型class
  • 默认值null
  • 重要级别:低
  • 有效值 / 注意事项null 继承 Worker 配置;显式类必须是可实例化的 Converter。记录 key 默认不作为事件内容发送。

value.converter

指定记录 value 的 Kafka Connect Converter。
  • 类型class
  • 默认值null
  • 重要级别:低
  • 有效值 / 注意事项null 继承 Worker 配置;转换结果会由 Connector 序列化为文本、JSON 或 HEC Event 内容。

header.converter

指定 Kafka Header 的 Converter。
  • 类型class
  • 默认值null
  • 重要级别:低
  • 有效值 / 注意事项null 继承 Worker 配置;启用 splunk.header.support 时应确保 Header 转换结果符合预期。

transforms

指定在 SinkTask 处理前依次执行的单消息转换(SMT)别名。
  • 类型list
  • 默认值:空列表
  • 重要级别:低
  • 有效值 / 注意事项:别名必须唯一;每个转换还需配置 transforms.<alias>.type 及其专属属性。

config.action.reload

控制 Config Provider 值变化或到期时的处理方式。
  • 类型string
  • 默认值restart
  • 重要级别:低
  • 有效值 / 注意事项:可选值为 restartnone;Config Provider 的注册属于 Worker 配置。

Kafka Connect 错误处理

errors.retry.timeout

设置 Kafka Connect 框架阶段可重试错误的总重试时长。
  • 类型long
  • 默认值0
  • 重要级别:中
  • 有效值 / 注意事项:单位毫秒;0 不重试,-1 表示无限重试。它不替代 Connector 自己的 HEC 批次重试。

errors.retry.delay.max.ms

设置 Kafka Connect 框架重试之间的最大等待时间。
  • 类型long
  • 默认值60000
  • 重要级别:中
  • 有效值 / 注意事项:单位毫秒;与 errors.retry.timeout 配合使用,不影响 HEC 通道的反压时长。

errors.tolerance

控制 Kafka Connect 框架是否容忍可报告的记录处理错误。
  • 类型string
  • 默认值none
  • 重要级别:中
  • 有效值 / 注意事项:可选值为 noneall;主要适用于转换、SMT 等框架阶段,不保证覆盖 Connector 内部的异步 HEC 失败。

errors.log.enable

控制是否记录 Kafka Connect 框架处理错误。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:该日志与 Connector 自身日志独立;启用后结合日志访问控制和保留策略使用。

errors.log.include.messages

控制框架错误日志是否包含记录上下文。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:启用后可包含 Topic、分区、Offset 和时间戳等信息;评估日志中的数据暴露风险,并与 errors.log.enable 配合使用。

errors.deadletterqueue.topic.name

指定 Kafka Connect 框架死信 Topic。
  • 类型string
  • 默认值:空字符串
  • 重要级别:中
  • 有效值 / 注意事项:空值关闭 DLQ;通常与 errors.tolerance=all 配合。DLQ Topic 不能被 topicstopics.regex 订阅,且该机制不覆盖所有 Connector 内部 HEC 失败。

errors.deadletterqueue.topic.replication.factor

设置 Kafka Connect 自动创建 DLQ Topic 时的复制因子。
  • 类型short
  • 默认值3
  • 重要级别:中
  • 有效值 / 注意事项:仅在 Connect 创建 DLQ Topic 时使用;值不得超过 Kafka 集群可用 Broker 数量。

errors.deadletterqueue.context.headers.enable

控制是否为 DLQ 记录添加 Kafka Connect 错误上下文 Header。
  • 类型boolean
  • 默认值false
  • 重要级别:中
  • 有效值 / 注意事项:启用后添加 __connect.errors.* Header;仅在配置了 DLQ 时有意义。

最佳实践

在生产接入时启用 HEC 确认

适用业务场景:快速开始已经完成基本写入,生产环境需要在 Splunk 返回 indexer acknowledgement 后再推进对应 Kafka Offset,并能接受故障恢复期间可能出现重复事件。 配置示例:沿用快速开始配置,并在 Splunk 中为同一 HEC Token 启用 indexer acknowledgement,再添加以下配置。
关键说明:在 HEC Token 已启用 indexer acknowledgement 且确认轮询正常工作的前提下,该模式提供至少一次交付,但不提供端到端事务或 exactly-once;HEC 已接收批次但确认响应丢失、超时、重启或再均衡都可能导致重放。根据实际索引延迟和并发量调整超时与轮询线程,并为需要严格去重的事件提供稳定事件标识或在 Splunk 侧实施去重。

扩展为多 Topic 的固定元数据路由

适用业务场景:初始单 Topic 接入已稳定,需要把应用日志和审计日志写入不同 index,并为每类数据设置明确的 source 与 sourcetype。 配置示例:在快速开始配置中替换 topics,并添加与 Topic 顺序一一对应的元数据列表。
关键说明:每个元数据列表可以只写一个共用值,也可以写与 topics 数量相同的值;使用多个值时,位置必须严格对应。该方式不适用于 topics.regex。需要动态路由时应启用 Kafka Header 映射,或使用 HEC Token 默认元数据,并验证生产者 Header 值域和访问权限。

随吞吐增长逐步提高发送并行度

适用业务场景:单 Task、单 HEC 发送线程已稳定运行,但 Kafka 积压持续增长,Splunk HEC 和网络仍有可用容量,需要通过更多 Task、连接和压缩提高吞吐。 配置示例:以具有至少四个输入分区、HEC 可承载相应并发为前提,在快速开始配置上添加以下起始值,再通过压测逐项调整。
关键说明:有效 Task 数受输入分区数限制,HEC 线程和通道则作用于每个 Task。增加并行度会提高 Worker 内存、连接和 Splunk 处理压力,也不保证跨分区、Task、通道或批次的全局顺序。每次只调整一组容量参数,观察 Kafka lag、HEC 响应、重试、Worker 堆内存与 CPU,再决定是否继续扩容。

监控

监控内容

关注 Kafka Connect 集群健康、Connector 和 Task 状态、消费与 HEC 写入吞吐、Kafka lag 和端到端延迟、Offset 提交进度、错误与重试,以及 Worker JVM 的堆内存、GC 和线程信号;同时关注 HEC 健康、确认超时、反压和重复事件。只有部署启用了相应框架错误处理时才关注 DLQ 活动,不能把 DLQ 视为所有 HEC 发送失败的兜底。

导入 Grafana 大盘

下载AutoMQ Connect Cluster Grafana 大盘,准备可查询 Kafka Connect 指标的 Prometheus 兼容数据源,并确保采集标签与大盘筛选条件一致;在 Grafana 的导入页面上传 JSON,选择对应数据源后保存。

限制条件

  • 启用 HEC 确认并满足确认条件时,交付语义为至少一次;重试、崩溃、再均衡或确认响应缺失仍可能产生重复事件。未启用确认时,Connector 在成功 HTTP 响应后完成批次,不提供 indexer acknowledgement 保障。两种模式都不提供 exactly-once 或目标端去重。
  • Splunk 返回 Invalid data format 时,Connector 会把该响应视为已完成并允许 Kafka Offset 推进,即使对应事件被忽略。
  • topics.regex 不能使用 splunk.indexessplunk.sourcessplunk.sourcetypes 的位置映射,需改用 Kafka Header 或 HEC Token 默认值。
  • HTTPS 且启用证书校验时,必须配置 Worker 可读取的自定义信任库路径。
  • /raw 模式的 Splunk 元数据作用于整个请求批次,自定义 Kafka Header 不会作为索引字段加入原始事件。

常见问题

Connector 正常运行,但 Splunk 中查不到事件

检查 Task 日志和状态、HEC 健康、Token 是否启用及是否允许写入目标 index,并确认 URI、端点模式和 /raw 换行规则正确。若启用了 HEC 确认,核对 Splunk Token 的 indexer acknowledgement 设置;若 Splunk 返回 Invalid data format,Connector 可能已推进 Offset。修正 HEC、权限或事件格式后,用一条小型有效事件重新验证。

故障恢复或重启后出现重复事件

HEC 可能已经接收批次,但 Kafka Offset 尚未提交,或确认响应在超时、连接切换和再均衡期间丢失。检查 HEC 确认和重试日志、Task 重启记录及 Offset 进度。正确启用 indexer acknowledgement,并按实际延迟设置超时;对不能接受重复的数据,在事件中保留稳定标识并在查询或后续处理中去重。

Kafka lag 持续增加或同一批记录反复重放

检查最早未完成批次的 HEC 响应、确认轮询、失败重试和在途事件数量,并确认至少一个 HEC 通道健康。先恢复 Token、index、网络或 HEC 容量,再评估并行度;不要在未确认数据边界前直接重置 Offset,因为这可能造成数据缺失或更多重复。

HTTPS 校验或 Task 启动时报信任库错误

确认 splunk.hec.ssl.trust.store.path 在每个 Worker 上存在且可读,类型和密码正确,信任库包含 Splunk 证书的签发链,并核对 URI 主机名与证书匹配。修正信任库后重新启动 Task;不要把关闭证书校验作为长期解决方案。

事件写入了错误的 index、source 或 sourcetype

检查 topics 顺序与三类元数据列表的数量和顺序,以及 Kafka Header 映射是否覆盖了静态值。使用 topics.regex 时,位置映射不会生效,应改用 Header 或 HEC Token 默认值。/raw 还会按一组请求元数据发送批次,应确保同一批记录适合共享这些元数据。

Splunk 中的事件时间不符合预期

依次检查 Kafka 记录时间戳、splunk.hec.use.record.timestamp、正则命名组、超时日志、timestamp.formattimestamp.timezone 和 HEC 自动时间提取设置。选择一种主要时间来源并用代表性事件验证,避免同时启用会相互覆盖的提取路径。