我们假设我有一些流定义如下:
1) fileName.txt -> result after split -> fileName -> OK.
2) textfile.txt -> result after split -> efile. -> remove any t OR x in file name.
和一些处理逻辑如下:
Dataset<Row> allMessages = df.select(.....)
Dataset<Row> messagesOfType1 = df.select() //some unique conditions
Dataset<Row> messagesOfType2 = df.select() //some other unique conditions
正如我上面提到的,StreamingQuery firstQuery = messagesOfType1
.writeStream()
.foreach(new CustomForEachWiriter(ConfigurationForType1())) // class that extends ForeachWriter[T] and save data into external RDBMS table
.start();
StreamingQuery secondQuery = messagesOfType2
.writeStream()
.foreach(new CustomForEachWiriter(ConfigurationForType2())) // class that extends ForeachWriter[T] and save data into external RDBMS table (may be even another database than before)
.start();
负责消息处理和存储到RDBMS中。在最简单的方法中,我可以在CustomForEachWriter
中实现的专用方法中管理数据库连接。
但我并不喜欢这种方法,所以我想知道如何引入连接池。通常Connection和CustomForEachWriter
没有实现DataSource
接口,因此我不能简单地传递从驱动程序上的连接池中检索到的Connection(将抛出异常Serializable
)。它还会看到当新数据到达时,会创建TaskNotSerialized
的新对象。
请您解释一下这种结构化流媒体的正确方法是什么?
谢谢
亲切的问候