Разбивает ли keyBy DataStream между параллельными задачами в Flink (scala)? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу применить 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?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Да, keyBy гарантирует, что каждое событие с одним и тем же ключом будет обрабатываться одним и тем же экземпляром оператора.Это важно для высокопроизводительной обработки потоков с отслеживанием состояния с низкой задержкой.

Это позволяет локальному состоянию флинка, с ним легко работать и быстро.Таймеры также используют преимущества этого ключевого разделения.

Использование состояния ключа Flink , вероятно, будет работать намного лучше, чем использование объектов кэша.

0 голосов
/ 04 апреля 2019

Вместо объекта, я полагаю, вы должны использовать состояние .

Все события с одним и тем же ключом будут иметь доступ к одному и тому же состоянию и, следовательно, к одному и тому же значению.Изменение одного из этих состояний не повлияет на другие состояния клавиш.

...