1. 说明
关注重点:confluent版本对timestamp等类型的支持基本是残的。本次梳理相关处理流程,并尝试修复该问题。
2. 看数据如何变迁
2.1 介绍几个类:
| 类 | 所属模块 | 描述 | 别名 |
|---|---|---|---|
| org.apache.kafka.clients.consumer.ConsumerRecords | Kafka | 表征从Kafka里面拖出来的数据 | - |
| org.apache.avro.Schema | Avro | 表征Schema | AvroSchema |
| org.apache.kafka.connect.data.Schema | Kafka | 表征Schema | KafkaSchema |
| org.apache.kafka.connect.data.SchemaAndValue | Kafka | 表征带Schema的内容 | - |
| org.apache.kafka.connect.sink.SinkRecord | kafka | 表征带Schema的Record(key+value) | - |
| org.apache.avro.generic.GenericRecord | Avro | 传给parquet模块发送的数据类 | - |
说明:图中有两个类同名,于是自个给他们起了别名,这样也方面说明。
2.2 kafka connect的数据流
说明:图中有两个SchemaAndValue, 分别表示key和value
2.3 过程划分
转化过程比较复杂,多个模块间的LIB调来调去的,分阶段进行描述:
依据org.apache.kafka.connect.runtime.WorkerSinkTask.java中poll方法的处理,可以分为两个阶段:
- convertMessages:数据从AvroSchema和ConsumerRecords到SinkRecord的过程;
- deliverMessages:数据从SinkRecord到GenericRecord的过程;
本文详细梳理了confluent在处理Kafka数据,特别是timestamp类型支持上的问题,探讨了数据变迁过程,包括Kafka Connect的数据流,以及convertMessages阶段的数据转换流程。
1444

被折叠的 条评论
为什么被折叠?



