Одновременное обновление состояния Flink Statefun - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь реализовать сценарий обмена сообщениями, используя apache функции с отслеживанием состояния flink. Одно из моих состояний может обновляться двумя разными функциями, которые предоставляются MatchBinder. Эти две функции в основном проверяют текущее состояние и соответственно обновляют его.

  • Что произойдет, если эти две функции вызываются одновременно для одного и того же ключа?
  • Есть ли механизм очереди для отслеживания состояния функции, вызываемые для одного и того же ключа?
  • Можно ли заблокировать доступ / обновление состояния для последовательного доступа?

1 Ответ

1 голос
/ 20 июля 2020

Что произойдет, если эти две функции вызываются одновременно для одного и того же ключа?

MatchBinder - это, по сути, удобный способ написать одну функцию StateFun, которая начинает свое выполнение с первого сопоставления тип (или свойства) входящего сообщения. По сути, это способ избежать написания такого кода:

...
if (message instanceof A) {
  handleA((A) message);
} else if (message instanceof B) {
  handleB((B) message);
}
...

Итак, на самом деле, хотя вы предоставляете «разные» Java функции для каждого случая привязки, это вызывается та же функция StateFun, и будет выбран правильный случай привязки.

Есть ли механизм очереди для функций с отслеживанием состояния, вызываемых для того же ключа?

Да, функции StateFun будет вызываться последовательно для каждого адреса. Хотя функция применяется для определенного адреса c, никакое другое сообщение для этого адреса не будет применяться одновременно. Это происходит почти бесплатно, благодаря наличию Apache Flink в качестве фактического времени выполнения.

Можно ли заблокировать доступ к состоянию / обновление для последовательного доступа?

Доступ к состоянию и модификации являются atomi c и последовательными по адресу.

...