从 JSON 到 JSONL,Apache SeaTunnel 如何解决HTTP 大数据传输的内存难题?

转载自 | 数仓生态圈

SeaTunnel可以从HTTP中获取数据,一般来说,HTTP会返回一个JSON格式的字符串,SeaTunnel解析JSON后分解出来数据类型,然后输出到目标系统中。

常规来说是没有问题,但是如果这个HTTP请求的数据量过大,对于服务端和客户端的压力就非常大,那么如何解决这个问题呢?那就需要使用流式处理方式JSONL,边生成数据边发送,这样就不需要一次性把数据都放入内存,减少内存的使用量。例如从数据库里面获取1个月的订单,如果总共100万条数据,那么我们可以一次只取5天的数,循环获取和输出,那么就不需要一次性的把100万条数据放入内存中。

一、JSON与JSONL的输出格式

1、JSON

通过HTTP返回JSON样式的数据如下

复制代码
[  {    "id": 1,    "name": "a"  },  {    "id": 2,    "name": "b"  }]

返回的内容整体是一个JSON格式,数据处理会把返回的整个数据进行处理

2、JSONL

通过HTTP返回JSONL样式的数据如下```

复制代码
{"id":1,"name":"a"}{"id":2,"name":"b"}

返回的内容整体不是一个JSON格式,而是每行一个JSON类型,并且通过换行来分割其他JSON。

二、区分返回格式的参数

三、举例

1、先做一个HTTP测试服务,返回上面2种格式

复制代码
[root@localhost]# curl http://localhost:3000[  {    "id": 1,    "name": "aaa"  },  {    "id": 2,    "name": "bbb"  }][root@localhost]# curl http://localhost:3000/jsonl{"id":1,"name":"aaa"}{"id":2,"name":"bbb"}

2、JSON格式的配置

复制代码
env {  parallelism = 1  job.mode = "BATCH"}source {  Http {    plugin_output = "http"    url = "http://localhost:3000"    method = "GET"    format = "json"    enable_multi_lines = false    schema = {      fields {        id = int        name = string      }    }  }}sink {  Console {    parallelism = 1  }}

输出结果

复制代码
2026-07-04 18:13:09,073 INFO  [.a.s.c.s.c.s.ConsoleSinkWriter] [st-multi-table-sink-writer-1] - subtaskIndex=0  rowIndex=1:  SeaTunnelRow#tableId=Optional[http] SeaTunnelRow#kind=INSERT : 1, aaa2026-07-04 18:13:09,073 INFO  [.a.s.c.s.c.s.ConsoleSinkWriter] [st-multi-table-sink-writer-1] - subtaskIndex=0  rowIndex=2:  SeaTunnelRow#tableId=Optional[http] SeaTunnelRow#kind=INSERT : 2, bbb

3、JSONL格式的配置

复制代码
source {  Http {    plugin_output = "http"    url = "http://localhost:3000/jsonl"    method = "GET"    format = "json"    enable_multi_lines = true    schema = {      fields {        id = int        name = string      }    }  }}

返回结果和上面相同,如果把enable_multi_lines改为false,那么结果只会有第一条数据,后面的数据没有获取到。

四、总结

如果是常规的HTTP服务返回1个JSON格式的字符串时,那么就不用管这个参数,它默认就是false。如果是流式的JSONL输出格式,那么一定要记住设置enable_multi_lines参数为true。

相关推荐
白帽攻防录6 小时前
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信
java·网络安全·tomcat·apache
筑梦之路7 小时前
Kafka KRaft 模式 Kubernetes 部署手册(StatefulSet + apache/kafka 官方镜像)——筑梦之路
kafka·kubernetes·apache
wuyk5558 小时前
Python实战项目05:JSON数据解析与数据可视化小案例|全套实战闭环
python·信息可视化·json
zxanz18 小时前
https 的基本原理是什么样的?
网络协议·http·https
FIT2CLOUD飞致云8 小时前
电子表格支持嵌入集成,支持GaussDB数据源与StarRocks计算引擎,DataEase开源BI工具v3.1.0版本发布
开源·数据可视化·dataease·数据表格·bi
miofly8 小时前
GitHub 日榜趋势速报 | 2026-09-30
开源·github
Flynt8 小时前
把 bug tracker 塞进 git 仓库,同步和冲突怎么解决?我把 git-bug 拆开实测了一遍
分布式·git·开源
L·S·P15 小时前
25MB 管理 100+ 种数据库:开源轻量客户端 DBX 介绍与上手
数据库·mysql·开源·database·dbx
m4Rk_17 小时前
【论文阅读】Agent 记忆机制(83):Inside Out——用可演化 PersonaTree 构建 Agent 的核心长期记忆
论文阅读·人工智能·学习·开源·github
Experience-摆渡18 小时前
一个开源免费的本地AI抠图工具 unbagrnd:断网也能用的背景移除
人工智能·开源