Я хочу применить ProcessFunction () к потоку входных данных в Flink, чтобы обработать каждый входящий элемент с помощью одного объекта кэша. Мой код выглядит примерно так:
object myJob extends FlinkJob {
private val myCache = InMemoryCache()
private def updateCache(myCache,someValue) : Boolean = {//some code}
private def getValue(myCache,someKey) : Boolean = {//some code}
def run(params, executionEnv) : Unit = {
val myStream = executionEnv.getStream()
val processedStream = myStream.process(new ProcessFunction {
def processElement(value,context,collector) : Unit = {
//Update cache
//Collect updated event
}
}
processedStream.write()
}
}
Когда я распараллеливаю это задание, я предполагаю, что каждый параллельный экземпляр задания будет иметь свой собственный объект cacheObject и, следовательно, в нескольких объектах cacheObject может присутствовать один ключ кэша. Тем не менее, я бы хотел, чтобы для отдельного ключа была одна запись в кэше, то есть все записи, соответствующие определенному ключу, должны обрабатываться одним экземпляром и одним cacheObject. Будет ли использование keyBy () в myStream обеспечивать, чтобы все входящие события с одним и тем же ключом обрабатывались одной параллельной задачей / экземпляром задания Flink и, следовательно, также одним cacheObject?