数据同步工具chunjun(flinkx)-1.12.7 使用tips

目录

本文旨在记录chunjun使用过程中的tips,并且记录与官网描述不符的地方,以减少学习成本

1、在编写json的时候推荐使用在线json编辑器:

2、类似MySQL<—>MySQL这种需要编写带jdbcUrl的任务,注意reader和writer中jdbcUrl类型不一致

 3、以kafka—>mysql举例解释字段间的映射关系

4、kafka—>mysql,当kafka输入脏数据时,mysql会写入空行

5、kafkareader,group-offsets模式读不到已提交offset的数据


本文旨在记录chunjun使用过程中的tips,并且记录与官网描述不符的地方,以减少学习成本

最简单快速上手的方法就是熟读官网文档(纯钧 (dtstack.github.io))中的连接器参数

1、在编写json的时候推荐使用在线json编辑器:

Editor | JSON Crackhttps://jsoncrack.com/editor这个工具可以检查json格式是否正确自动规范json格式,并且可以自动规范json格式,还可以生成树状图直观查看结构,避免因为json格式问题导致任务无法运行

由于json格式问题引发的报错类似:Caused by: com.google.gson.stream.MalformedJsonException: Unterminated array at line 24 column 16 path $.job.content[0].reader.parameter.[1]

 检查json格式后可以避免

2、类似MySQL<—>MySQL这种需要编写带jdbcUrl的任务,注意reader和writer中jdbcUrl类型不一致

在reader中jdbcUrl为Array

而writer中jdbcUrl为String

 

这与官网文档中的描述是不一致的

 如果按照官网文档中写法,会产生格式匹配错误:

Caused by: java.lang.IllegalStateException: Expected STRING but was BEGIN_ARRAY at path $.jdbcUrl

 3、以kafka—>mysql举例解释字段间的映射关系

kafka topic中有两种数据:

{"id":"1","name":"a1","A1":"0.001","A2":"0.005","A3":"100","A4":"abadc","A5":"eqerd"}
{"id":"2","name":"a2","A1":"0.001","A2":"0.005","A3":"5","A4":"abadc","A5":"eqerd"}
{"id":"3","name":"a3","A1":"0.1","A2":"0.3","A3":"20","A4":"","A5":"qerda"}
{"id":"4","name":"a4","A1":"0.00070","A2":"12.2","A3":"10","A4":null,"A5":"weaef"}
{"id":"5","name":"a5","A1":"0.1","A2":"0.3","A3":"20","A4":"adfsa","A5":"qerda"}
{"id":"6","name":"a1","A1":null,"A2":null,"A3":"100","A4":"abadc","A5":"eqerd"}
{"id":"1","name":"a1","B1":"0.1","B2":"5","B3":"GKLGU"}
{"id":"2","name":"a2","B1":"1.425","B2":"10","B3":"HJFV"}
{"id":"3","name":"a3","B1":"54.12","B2":"4325","B3":"FDGAD"}
{"id":"4","name":"a4","B1":"10.0","B2":"1","B3":null}
{"id":"5","name":"a5","B1":null,"B2":"11","B3":"SDF"}
{"id":"6","name":"a7","B1":null,"B2":null,"B3":null}

第一种包含id、name、A1、A2、A3、A4、A5字段

第二种包含id、name、B1、B2、B3字段

写入目标表字段 id、name、A1、A2、A3、A4、A5、B1、B2、B3

① 实验一:

kafkareader:name、A1、A2、A3、A4、A5、B1、B2、B3

mysqlwriter:name、A1、A2、A3、A4、A5、B1、B2、B3

结果正常写入

② 实验二

kafkareader:name、A1、A2、A3、A4、A5、B1、B2、B3

mysqlwriter:name、A2、A1、A3、A5、A4、B1、B2、B3

结果表中A1、A2列互换,A4、A5列互换

③ 实验三

kafkareader:name、A2、A1、A3、A4、A5、B1、B2、B3

mysqlwriter:name、A1、A2、A3、A4、A5、B1、B2、B3

结果表中A1、A2列互换

④  实验四(忘截图了)

kafkareader:name、a1、a2、a3、A4、A5、b1、B2、B3

mysqlwriter:name、A1、A2、A3、A4、A5、B1、B2、B3

结果目标表中A1、A2、A3、B1列为null

⑤ 实验五(忘截图了)

kafkareader:name、A1、A2、A3、A4、A5、B1、B2、B3

mysqlwriter:name、a1、a2、A3、A4、A5、B1、B2、B3

结果运行失败,无法在mysql中找到a1、a2列

结论:

① 在任务运行至reader时,chunjun会依据kafkareader中定义的字段匹配topic中数据,且字段顺序不受kafka顺序限制,如果reader中的字段在kafka topic中没有出现,则赋予null,

② 在字段对应时按顺序赋值,当reader中为M、L、N,writer中为l、m、n时,M->l,L->m,N->n,官网文档描述不准确,因此只要了解kafka中数据与MySQL中表字段的对应关系即可快速编写json

③ 在任务运行至writer时,chunjun会依据mysqlwriter中定义的字段写入mysql表,且字段顺序不受mysql顺序限制,如果writer中的字段在mysql中没有出现,则报错

④ 字段对应可以做到一对多,比如reader中A1、A1、A1,writer中A1、A2、A3,则mysql表中A1、A2、A3列都会附A1值

4、kafka—>mysql,当kafka输入脏数据时,mysql会写入空行

如果目标表中某列设置为not null则不论是否chunjun设置errorLimit,任务都将直接失败

注意向kafka中写入数据的合规性

5、kafkareader,group-offsets模式读不到已提交offset的数据

chunjun kafkareader中有五种mode:

  • group-offsets:     从ZK / Kafka brokers中指定的消费组已经提交的offset开始消费
  • earliest-offset:    从最早的偏移量开始(如果可能)
  • latest-offset:      从最新的偏移量开始(如果可能)
  • timestamp:         从每个分区的指定的时间戳开始
  • specific-offsets: 从每个分区的指定的特定偏移量开始

group_offsets模式在group中数据没有被消费过时,默认offset为-915623761773L,

这时使用该模式实测会跳过原有数据直接到最新的offset,相当于latest-offset模式,查询原理发现:

chunjun这部分代码继承的是flink kafka api,当设置为group_offsets模式时如果该group的offset不存在,或者无效的话,将依据 "auto.offset.reset" 该属性来决定初始 offset。auto.offset.reset 默认为 largest。

若想消费到原有数据可以依如下办法,手动将"auto.offset.reset"设置为earliest

auto.offset.reset的earliest参数

在各分区下有提交的offset时:从offset处开始消费

在各分区下无提交的offset时:从头开始消费

如此可以实现绝大部分场景了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这些都是不同的数据格式,用于在不同的场景中存储和交换数据。下面是它们的区别和示例: 1. JSON(JavaScript Object Notation):是一种轻量级的数据交换格式,易于阅读和编写。它使用键值对的方式组织数据,并支持嵌套结构。JSON常用于Web应用程序中的数据传输和存储。 示例: ```json { "name": "John", "age": 30, "city": "New York" } ``` 2. OGG-JSON:是一种嵌套的JSON格式,常用于存储音频文件的元数据信息。 示例: ```json { "title": "Song Title", "artist": "Artist Name", "duration": 180, "album": { "title": "Album Title", "year": 2021 } } ``` 3. Chunjun-JSON:这可能是一个自定义的或特定领域的JSON格式,没有明确的定义或广泛使用。 示例: ```json { "property1": "value1", "property2": "value2" } ``` 4. CSV(Comma-Separated Values):是一种纯文本格式,用逗号分隔字段。它通常用于存储表格数据,每行表示一个记录,每列表示一个字段。 示例: ``` name, age, city John, 30, New York Alice, 25, London ``` 5. Avro:是一种二进制数据序列化格式,用于高效地存储和传输大数据集。它定义了数据的结构和架构,并支持动态类型和架构演化。 示例: ```json { "type": "record", "name": "Person", "fields": [ {"name": "name", "type": "string"}, {"name": "age", "type": "int"}, {"name": "city", "type": "string"} ] } ``` 这些数据格式在不同的场景中有各自的优势和适用性。选择合适的格式取决于数据的结构、用途以及所使用的技术栈。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

省略号的搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值