【发布时间】:2020-04-30 23:31:27
【问题描述】:
我们有一个用例,我们尝试使用与 Schema 注册表集成的多个 Kafka 主题(AVRO 消息)。 我们正在使用 Spark 结构化流(Spark 版本:2.4.4)、Confluent Kafka(库版本:5.4.1):
val kafkaDF: DataFrame = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "<bootstrap.server>:9092")
.option("subscribe", [List of Topics]) // multi topic subscribe
.load()
我们正在从上面的 DF 中选择值并使用 Schema 反序列化 AVRO 消息
val tableDF = kafkaDF.select(from_avro(col("value"), jsonSchema).as("table")).select("*")
这里的障碍是,由于我们使用多个 Kafka 主题,我们已经将所有 JSON 模式集成到 MAP 中,key 是 主题名称 和 values 是各自的架构。 我们如何在上面的选择中使用相同的地图进行查找?我们尝试了 UDF,但它返回一个“col”类型,但 jsonSchema 必须是 String 类型。此外,不同主题的架构也不同
几个附加问题:
- 上述方法对于同时使用多个主题是否正确?
- 我们应该为每个主题使用单个消费者吗?
- 如果我们有更多的主题,我们如何实现并行主题处理,cos 顺序可能需要大量时间。
【问题讨论】:
-
您在转换数据吗?存储到哪里?
-
需要一点点转换。
-
好的,否则 KAFKA Connect 会是更好的选择
-
您确实可以映射主题,但这取决于数量。您是否正在写入不同的输出区域?
-
是的,映射主题很好,但是 schema 呢,每个主题一个呢?我们如何将它们结合起来。
标签: apache-spark apache-kafka avro confluent-schema-registry