[英]Kafka Connect: Read JSON serialized Kafka message, convert to Parquet format and persist in S3
[英]Kafka - From JSON records to Parquet files in S3
如果我错了,请纠正我。.实木复合地板文件是自我描述的,表示它包含正确的架构。
我想使用S3水槽汇合连接器(特别是因为它可以正确地使用S3处理“精确一次”语义)从我们的Kafka中读取JSON记录,然后在s3中创建镶木地板文件(按事件时间划分)。 我们的JSON记录未嵌入架构。
我知道尚不支持此功能,但是我也很少有关于镶木地板和AVRO的问题。
由于我们的JSON记录中没有嵌入任何模式,这意味着连接器任务将不得不从JSON字段本身推断出数据? (这是可行的解决方案吗?)
在Kafka中,没有像架构注册表这样的东西,而是用于拼花地板的..是吗?
AVRO似乎已与Kafka很好地集成在一起,这意味着可以使用架构注册表读取架构。这是否意味着融合的S3接收器将足够聪明,可以在s3中创建包含架构作为标头的文件,然后在s3文件中创建一堆记录?
我知道那个家伙正在为这个s3水槽连接器实施镶木地板的实现:
https://github.com/confluentinc/kafka-connect-storage-cloud/pull/172
但是我不明白,似乎在代码中使用了AVRO模式,这是否意味着在Kafka中就有AVRO记录可以使用此Parquet实现?
我开始认为在S3上定位AVRO文件会更容易(我可以通过失去一些OLAP功能来负担得起),但是想要在进入AVRO之前先确定一下。
问候,
雅尼克
如果我错了,请纠正我。.实木复合地板文件是自我描述的,表示它包含正确的架构
正确。 如果有实木复合地板文件,则可以从中获取架构。
在s3中创建包含架构作为标头的文件,然后在s3文件中创建一堆记录?
是的,这正是S3 Connector处理Avro文件的方式。
似乎在代码中使用了AVRO模式,这是否意味着在Kafka中就有AVRO记录可以使用此Parquet实现?
我没有对PR进行过多的研究,但是我认为Parquet存储格式仅需要一个Connect Schema,而不需要Avro数据,因为使用AvroData类,可以在Connect Schema和Avro Schema之间进行来回转换,例如avroData.fromConnectSchema(schema)
。 这将解析“连接架构”结构并形成一个新的Avro架构,不适用于注册表或要求输入数据为Avro。
话虽如此,如果您的JSON对象确实具有模式,则可能可以使用其他JSONFormat选项来编写它们,因为format.class
设置在Converter之后应用。 有趣的是,我知道我可以使用AvroConverter + JSONFormat将Avro输入记录写为JSON文件,但是我没有尝试将JSONConverter +模式的JSON与AvroFormat一起使用,因此YMMV
我开始认为在S3上定位AVRO文件会更容易
可能...注意,您可以改用Secor,它具有Hive表集成和对JSON的Parquet支持
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.