系列文章目录

前言
随着需求演进迭代,经常需要把上游进来的一份数据,按照不同数据格式(字段打平、名称修改、类型转换、结构调整、数据过滤)转存或者分发到各应用。而在其中,我们耗费了不少的人力在json to json和sink to where的编码上。
一、本文要点
前面的文章,介绍了Docker搭建各种环境、SpringBoot整合各种中间件、如何把应用部署到云容器,本文开始一个新系列。系列文章完整目录
相信大部分业务都有这样的场景,消费一种MQ消息->转换为另外一种数据格式->转存到DB/REDIS/ES/COS或者推送到另外一个MQ,俗称数据搬运。但由于历史技术债务或者多方团队合作的等原因,项目对接的业务使用的数据格式存在很大差异,需要做不同程度的数据转换,例如:
也就是说,我们需要具备以下数据格式转换能力来适配各业务诉求。
- 字段名称修改
- 字段打平或展开
- 字段类型和值转换
- 字段结构转换
- 字段值过滤
很明显,如果硬编码去做这种数据搬运是乏味而低效的,我们需要一款工具去提效,它需要具备以下核心能力。
- 动态配置数据输入源
- 通过DSL描述JSON->JSON的转换逻辑(非硬编码,动态修改)
- 动态配置输出目标
通过调研发现,云产品SCF+CKAFKA实现的消息转储已经很接近我们的诉求,但它提供的功能仅支持原格式转储,其它格式则需要自行编码开发,跟我们的目标不符。输入和输出的动态配置能力相对比较简单,可以通过封装组件来实现,核心的要素还是在于数据格式的转换。经过一轮Google,发现JOLT比较符合我们组当前的业务场景。
- JSON to JSON
- JSON 结构转换
- Kafka 转存到 ES
- Kafka 转存到 DB
- DB 数据转KAFKA消息
- DB 数据转存ES
二、开发环境
- jdk 1.8
- maven 3.6.2
- springboot 2.4.3
- Jolt 0.1.5
- idea 2020
三、Jolt 是什么?
1、JOLT是什么?
JSON to JSON transformation library written in Java where the “specification” for the transform is itself a JSON document.
- Transforming JSON data from ElasticSearch, MongoDb, Cassandra, etc before sending it off to the world
- Extracting data from a large JSON documents for your own consumption
Jolt 实则上是一个类库,在当今大数据场景主流的ETL pipeline 工具如NIFI和 StreamSets都支持Jolt作为Json转换插件,还有我们熟悉的camel等,它支持我们使用特定的DSL来进行JSON to JSON转换。
2、JOLT支持哪些转换?