Kiro CLI + EKS MCP Server 实战:两种 Fluent Bit 日志落地 S3 Parquet 方案的完整技术对比
需求场景
EKS 上的应用产生 JSON 格式的埋点日志(页面浏览、点击、交易等),需要以 Apache Parquet 格式落地 Amazon S3,供 Athena、Spark、Redshift Spectrum 做离线分析。
Parquet 列式存储对比 JSON,存储成本和查询扫描成本可降低 60-90%。日活百万场景下,4GB/天 JSON 数据压缩到 400-800MB Parquet。
从 EKS 到 S3 Parquet 有两条主要路径,核心区别是 谁来做 JSON → Parquet 的转换。
方案 A:Fluent Bit 原生 Parquet 直写
架构:App Pod → Fluent Bit Sidecar (自编译 Arrow 镜像) → S3 (.parquet)
Fluent Bit S3 output plugin 支持 compression parquet 参数,但需要编译时启用 Apache Arrow(-DFLB_ARROW=On)。
关键步骤
- 多阶段 Dockerfile 编译(安装 libarrow-dev + libparquet-dev,约 15 分钟)
- 推送 ECR
- 创建 S3 bucket + IAM Policy + IRSA
- Sidecar 模式部署(App + Fluent Bit 共享 emptyDir)
- pyarrow 验证输出
Fluent Bit 配置
[OUTPUT]
Name s3
Match *
bucket eks-fluentbit-logs-<ACCOUNT_ID>
region us-west-2
compression parquet
s3_key_format /parquet-logs/%Y/%m/%d/%H/
方案 B:Fluent Bit → Firehose + Glue → S3
架构:App Pod → Fluent Bit (官方镜像) → Firehose (Data Format Conversion) → S3 (.parquet)
Firehose 根据 Glue Data Catalog 定义的 Schema 做 JSON → Parquet + SNAPPY 压缩。
关键步骤
- 创建 Glue Database + Table(声明 Parquet Schema)
- 创建 Firehose Delivery Stream(开启 DataFormatConversion)
- Firehose IAM Role(S3 写 + Glue 读)
- IRSA(授权 Pod 调
firehose:PutRecord) - Fluent Bit 用
kinesis_firehoseoutput plugin
Fluent Bit 配置
[OUTPUT]
Name kinesis_firehose
Match *
region us-west-2
delivery_stream eks-parquet-stream
技术对比
| 维度 | 方案 A | 方案 B |
|---|---|---|
| 镜像 | 自编译(C++ Arrow 交叉编译) | 官方 aws-for-fluent-bit |
| 转换位置 | Pod 本地 | Firehose 云端 |
| Schema 管理 | 无(自动推断) | Glue Table 声明式(改 Schema 不需重启 Pod) |
| 额外资源 | ECR | Firehose + Glue |
| 延迟 | 低(本地转换) | 略高(网络传输 + Firehose 缓冲) |
| 成本(4GB/天) | ECR $0.02/月 | Firehose $3.5/月 |
Kiro CLI 在搭建中的作用
Kiro CLI 通过 EKS MCP Server 直接操作集群——部署 K8s 资源、查 Pod 日志、验证数据链路。Steering 机制(.kiro/steering/ 目录放 Markdown 文件)解决了重复上下文问题。
两种方案搭建时间:方案 A 约 30 分钟,方案 B 约 25 分钟(含 Kiro 辅助)。
选型建议
方案 A 适合追求简单架构、对延迟敏感、团队有镜像构建能力的场景。方案 B 适合不想维护自编译镜像、需要 Schema 管理和字段过滤能力的场景。新项目推荐方案 B。

浙公网安备 33010602011771号