簡體   English   中英

Flink 對單個源使用多個數據類

[英]Flink use multiple data classes for a single source

一些代碼:

implicit val formats = Serialization.formats(NoTypeHints)

case class DataClass(id: String, name: String)    

val dataSource = env
      .addSource(new FlinkKinesisConsumer[String](s"data-stream-$stage", new SimpleStringSchema, consumerConfig))
      .uid(s"data-stream-$stage-source-id").name("dataSource")
      .map(json => read[DataClass](json))

在這里,我從 kinesis stream 中獲取數據,並對我的數據 class 進行序列化。 一切正常,但現在需要添加以另一種格式接收數據的功能(例如DataClassSecond

其中一個選項是添加一個額外的數據源並在您自己的 stream 中處理它們。

但這需要一個額外的運動隊列。 而且我不確定這是否是一個好方法是否有任何方法可以從 kinesis 接收不同的數據,然后根據類型拆分 stream?

您可以嘗試根據字段filter DataStream[String] ,這樣您將獲得兩個或更多只包含具有正確 JSON 格式的元素的流。

所以最簡單的方法是這樣的:

val streamDataClass = sourceStream.filter(_.contains("name"))
val streamDataClassSecond = sourceStream.filter(_.contains("surname"))

這僅在namesurname對每個DataClass都是唯一的情況下才有效。 更有效的做法可能是首先mapDataStream轉換為某種通用格式,或者使用Either作為反序列化結果,然后檢查它是否成功。

暫無
暫無

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

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