Java protobuf数据从kafka自动同步到impala中解决方法

阅读(4730)
## code download from https://github.com/confluentinc?page=1
version: confluent-3.2.1
including:
    common
    rest-utils
    schema-registry
    kafka-to-hdfs

声明:
源码来自github上confluen公司开源代码,对部分地方作修改以满足使用场景,编译方式从maven修改为buck.

功能:
将protobuf结构数据转成的json结构数据从kafka同步到hdfs中,并保存为parquet结构;然后将hdfs数据导入到impala中以进行结构化查询操作.

主要修改点:
1.新增类JsonToAvroConverter用于json结构数据到指定schema的avro数据的转换;文件路径如下:
schema-registry/avro-converter/JsonToAvroConverterConfig.java
schema-registry/avro-converter/JsonToAvroConverter.java

2.新增类PeriodPartitioner用于根据当前时间生成数据path,FieldPeriodPartitioner用于从结构体中获得分区时间以生成数据path;文件路径如下所示:
kafka-connect-hdfs/partitioner/PeriodPartitioner.java
kafka-connect-hdfs/partitioner/FieldPeriodPartitioner.java

3.修改parquet-avro中的AvroWriteSupport.java文件,使得默认输出avro到parquet的新结构,以避免repeated字段在impala中的错误解析.

需要改进的地方:
1.受限于avro的schema表述,不支持嵌套自身的message结构数据;