首页 > 解决方案 > 如何使用 Spark 流式传输动态应用架构

问题描述

我有一个接收 SOAP 消息的 Web 服务,在 XJC 的帮助下,我能够将这些消息部分转换为 pojo,然后使用 kafka json 序列化程序将所述消息发送到 Kafka。

我现在正在尝试使用 kafka 流式传输消息,然后最终保存到数据湖。

要求是至少对数据湖中的数据具有某种结构。但是,因为初始模式是在 2 个循环依赖的 xsd 中给出的,所以我无法找到关于如何在数据流入时将结构应用于数据的解决方案。我知道在给定一批的情况下推断模式消息,但我目前没有足够的样本数据。

需要注意的一点是,消息因原始模式而异,因为它具有<choice>元素,因此每条消息可能都不相同。鉴于我上面概述的限制,我如何才能对这些数据进行结构化?我没有考虑附加任何代码,因为这更像是一个攻击计划,而不是此时的代码问题。希望这在指导方针之内,有人可以帮助我完成这个项目。提前致谢。

标签: apache-sparksoapapache-kafkaspark-structured-streaming

解决方案


如果你真的想要一个定义明确、不断发展的模式,可以很好地与 Datalakes(HDFS、S3 等)一起工作,我建议通过 Confluent Schema Registry而不是 JSON 来使用 Avro。您甚至可以使用KafkaAvroSerializer当前使用的 JSON 而不是 JSON。

Avro 不是 Kafka 的要求,但这也将使您更轻松地使用 Kafka Connect Framework 写入 HDFS 或 S3,并使用 Hive/Presto/SparkSQL 等 SQL 工具查询此数据。这里首选 Kafka Connect,因为您实际上不需要编写流式代码。

如果您想使用 XML 和 XSD 模式,请查看kafka-connect-xml转换器

我遇到的具有良好 XML 支持的 Datalake ETL 的其他替代品是 NiFi 和 StreamSets。


推荐阅读