confluent 对kafka格式化数据的处理

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的数据流

confluent 对kafka格式化数据的处理_第1张图片
说明:图中有两个SchemaAndValue, 分别表示key和value

2.3 过程划分

转化过程比较复杂,多个模块间的LIB调来调去的,分阶段进行描述:
依据org.apache.kafka.connect.runtime.WorkerSinkTask.java中poll方法的处理,可以分为两个阶段:

  1. convertMessages:数据从AvroSchema和ConsumerRecords到SinkRecord的过程;
  2. deliverMessages:数据从SinkRecord到GenericRecord的过程;

3. convertMessages

你可能感兴趣的:(kafka)