Flink time с буферизованной раковиной - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь написать приложение Flink, которое читает события из Kafka, обогащает эти события из MySQL и записывает эти данные в HBase.Я делаю обогащение MySQL в RichFlatMapFunction и сейчас пытаюсь выяснить, как лучше написать в HBase.Я хочу выполнить пакетную запись в HBase, поэтому в настоящее время я думаю об использовании WindowAll, за которым следует идентификатор apply (только чтобы вернуться к DataStream), а затем написать HBaseSink, который принимает списокзаписей и делает партию Puts до HBase.

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

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Из того, что я вижу на Jira с FLINK-2055 , я думаю, что в настоящее время вам лучше всего использовать поддержку Flink Streaming для асинхронного ввода-вывода и обрабатывать буферизацию внутри него.пользовательская функция.Похоже, что хитрые биты происходят из (а) правильной обработки контрольных точек / повторных попыток (атомарных пут) и (б) избежания перегрузки серверов региона HBase.Но если вы не беспокоитесь о единовременной поддержке и можете настроить параметры в соответствии с настройками HBase, то это должно быть довольно просто.

0 голосов
/ 27 сентября 2019

Самая тяжелая операция при работе с HBase - на самом деле открыть соединение с ним (как также объясняется в документации: https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Connection.html).

. Я бы предложил создать еще один RichFlatMapFunction, такой, чтобы вывозможность открывать одно соединение только один раз в каждой задаче, а затем выполнять Put для HBase каждый раз, когда требуется сохранение события. До сих пор разница с вашим текущим подходом будет такова:

  • вам не требуется использовать WindowAll
  • , вы не открываете новое соединение с HBase каждый раз в HBaseSink

Что касается факта выполненияPut для HBase из пакета или с точки зрения потоковой передачи, фактически не меняет сложности операций (как вы также можете видеть из первого ответа на этот вопрос: Поставлен ли пакет HBase в виде пакета (Список * 1018)*) быстрее, чем put (Put)? Какова емкость объекта Put? ) пока вы будете выполнять еще N операций для сохранения N событий.

...