2016-06-10 8 views
1

В настоящее время я использую флексию Apache и использую RxJava внутри себя, мои вопросы: использование обоих из них подходит? потому что мои операции flink всегда являются функциями карты, и внутри них я интенсивно использую Rx, например, беру кортежи из flink и делаю асинхронные операции с ними (перейдите в DB, ​​напишите в очередь и так далее), но я не закончил используя большинство методов, которые показывают мне, и мои шаги программы возвращают json, когда Rxjava заканчивается обработкой.Использование Apache Flink и RxJava

Можете ли вы сказать мне, является ли это правильное использование флинка, или если есть лучший способ сделать то, что мне нужно сделать. (например, использовать его, но пропускать наблюдаемые между шагами flink или что-то в этом роде).

Спасибо.

ответ

1

У Flink есть мощные инструменты для управления состоянием (например, в окнах) [1,2], что часто позволяет избежать вызовов в другие системы. Например, вместо того, чтобы обрабатывать состояние во внешнем хранилище ключей, вы можете использовать (checkpointed) KeyValueState в Flink. Обработка состояния внутри Flink обычно более эффективна/быстрее, чем вызов внешних систем/баз данных.

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

Последний пункт был недавно обсуждалось в списке рассылки: http://mail-archives.apache.org/mod_mbox/flink-user/201606.mbox/%[email protected].com%3E

[1] https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/windows.html [2] https://ci.apache.org/projects/flink/flink-docs-release-1.0/apis/streaming/state.html