Collector 管道核心组件:Source、Processor、Sink 的定义与职责

平台工程自助目录中的 Collector 管道采用经典的三阶段流水线架构:Source(数据源)、Processor(处理器)、Sink(数据汇)。每个阶段职责明确、可独立配置与扩展,组件之间通过内部事件总线或通道(Channel)进行异步通信,实现高吞吐、低耦合的数据采集与处理。

2.1 核心组件定义与职责

组件 定义 核心职责 典型实现
Source 数据采集入口,负责从外部系统拉取或接收事件/指标/日志 协议适配、数据格式转换、初始元数据注入、背压感知 HTTP Source、Kafka Source、File Tail Source、Prometheus Pull Source
Processor 数据加工中间件,对 Source 产生的原始事件进行过滤、转换、丰富、聚合 数据清洗、字段映射、采样降噪、上下文关联、速率限制 Filter Processor、Transform Processor、Enrich Processor、RateLimit Processor
Sink 数据输出终端,将处理后的数据写入目标存储或下游系统 持久化写入、重试与死信处理、格式序列化、分区路由 Elasticsearch Sink、S3 Sink、Kafka Sink、Prometheus Remote Write Sink
设计原则:Source 只负责“获取”不负责“加工”;Processor 只负责“转换”不负责“传输”;Sink 只负责“写入”不负责“解析”。这种单一职责划分使得每个组件可以独立进行参数调优、版本升级和故障隔离。

2.2 组件间通信机制

Collector 管道内部采用 Channel(通道) 作为组件间的数据交换媒介。Source 将事件写入 Channel,Processor 从 Channel 读取并处理后写回下游 Channel,最终由 Sink 消费。这种生产者-消费者模式天然支持异步解耦和流量削峰。

2.2.1 通道类型对比

通道类型 存储方式 持久化 适用场景 性能特征
Memory Channel 内存队列 否 低延迟、可容忍重启丢失 吞吐极高,延迟 <1ms
File Channel 本地文件(WAL) 是 需要故障恢复、数据不丢 吞吐中等,延迟 1-10ms
Kafka Channel Kafka Topic 是 跨进程/跨节点管道、多消费者 吞吐高,延迟 5-50ms

2.2.2 背压与流量控制

当 Sink 写入速度低于 Source 采集速度时,Channel 会触发背压(Backpressure)机制:

  • Memory Channel:通过队列容量上限(capacity)和拒绝策略(discard/block)控制。
  • File Channel:通过磁盘空间阈值和检查点间隔控制写入速率。
  • Kafka Channel:依赖 Kafka 生产者的 max.block.ms 和缓冲池大小。
常见调优陷阱:Memory Channel 的 capacity 设置过大(如超过 100000)会导致 GC 压力剧增;File Channel 的 checkpointInterval 设置过小(如 <100ms)会频繁刷盘,降低吞吐。建议根据单条事件大小和预期峰值 QPS 计算合理容量。

2.3 管道数据流与组件协作

下图展示了一个典型的三阶段管道数据流,包含 Source 采集、Processor 链式处理、Sink 多路输出,以及 Channel 在组件间的缓冲与解耦作用。

Collector 管道组件协作与数据流 Source HTTP / Kafka / File Channel Memory / File / Kafka Processor Filter Transform / Enrich Channel Memory / File / Kafka Sink ES / S3 / Kafka Sink Prometheus / Log 说明: Source 和 Processor 之间、Processor 和 Sink 之间 均通过 Channel 解耦,支持异步背压与多路输出。

2.4 组件生命周期与事件传递

每个组件在管道启动时经历 初始化 → 启动 → 运行 → 关闭 四个阶段。事件在组件间以 Event 对象 形式传递,包含 headers(元数据)和 body(负载)两部分:

// Event 结构示例
{
  "headers": {
    "source_type": "http",
    "timestamp": 1712567890123,
    "tenant_id": "platform-eng",
    "trace_id": "abc-123-def"
  },
  "body": {
    "service": "catalog-api",
    "latency_ms": 245,
    "status_code": 200,
    "path": "/api/v1/services"
  }
}
关键参数:headers 中的 timestamp 字段用于 Processor 做时间窗口聚合和延迟计算;trace_id 用于跨组件链路追踪。建议在 Source 阶段统一注入这些元数据,避免 Processor 重复解析。

2.5 组件间通信的可靠性保障

可靠性维度 Memory Channel File Channel Kafka Channel
进程崩溃恢复 丢失所有未消费事件 从最近检查点恢复 从 Kafka 最新 offset 恢复
事件重复投递 极少(内存语义) 检查点间隔内可能重复 至少一次语义(可配置)
背压处理 阻塞 Source 或丢弃 写入磁盘等待 Kafka 端限速
推荐场景 开发环境、可丢数据 生产环境、数据不丢 分布式部署、高可用
生产建议:对于生产环境的 Collector 管道,推荐使用 File Channel 或 Kafka Channel 保证数据不丢失。Memory Channel 仅适用于开发调试或对数据丢失不敏感的场景(如实时监控看板)。如果必须使用 Memory Channel,请配合 Processor 层的去重逻辑。