簡體   English   中英

如何在以kafka為來源的Spark結構化流中識別消息的來源?

[英]How to identify the origin of messages in spark structured streaming with kafka as a source?

我有一個用例,其中我必須在Spark 結構化流中訂閱kafka中的多個主題。 然后,我必須解析每個消息,並從中組成一個三角洲湖泊表。 我已經使解析器和消息(以xml形式)正確地解析並形成了delta-lake表。 但是,到目前為止,我僅訂閱一個主題。 我想訂閱多個主題,並且基於該主題,它應該轉到為該特定主題專門設計的解析器。 因此,基本上,我想在處理所有消息時為它們標識主題名稱,以便可以將它們發送到所需的解析器並進一步處理。

這就是我訪問來自不同主題的消息的方式。 但是,我不知道如何在處理傳入消息時識別它們的來源。

 val stream_dataframe = spark.readStream
  .format(ConfigSetting.getString("source"))
  .option("kafka.bootstrap.servers", ConfigSetting.getString("bootstrap_servers"))
  .option("kafka.ssl.truststore.location", ConfigSetting.getString("trustfile_location"))
  .option("kafka.ssl.truststore.password", ConfigSetting.getString("truststore_password"))
  .option("kafka.sasl.mechanism", ConfigSetting.getString("sasl_mechanism"))
  .option("kafka.security.protocol", ConfigSetting.getString("kafka_security_protocol"))
  .option("kafka.sasl.jaas.config",ConfigSetting.getString("jass_config"))
  .option("encoding",ConfigSetting.getString("encoding"))
  .option("startingOffsets",ConfigSetting.getString("starting_offset_duration"))
  .option("subscribe",ConfigSetting.getString("topics_name"))
  .option("failOnDataLoss",ConfigSetting.getString("fail_on_dataloss")) 
  .load()


 var cast_dataframe = stream_dataframe.select(col("value").cast(StringType))

 cast_dataframe =  cast_dataframe.withColumn("parsed_column",parser(col("value"))) // Parser is the udf, made to parse the xml from the topic. 

如何在Spark結構化流中處理消息時標識消息的主題名稱?

根據官方文件 (重點是我的)

源代碼中的每一行都具有以下架構:

列類型


密鑰二進制
值二進制
主題字符串
分區整數

...

如您所見,輸入主題是輸出模式的一部分,無需任何特殊操作即可進行訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM