Нужна подсказка по архитектуре: репликация данных в облако + очистка данных

Мне нужно синхронизировать данные о клиентах из нескольких локальных баз данных в облаке. На втором этапе данные о клиентах нуждаются в некоторой очистке, чтобы удалить дубликаты (разных типов). На основе этих очищенных данных мне нужно провести некоторую аналитику данных.

Для достижения этой цели я ищу платформу с открытым исходным кодом или облачное решение, которое я могу использовать. Я изучил Apache Apex и Apache Kafka, но не уверен, что это правильные решения.

Не могли бы вы подсказать, какие фреймворки вы бы использовали для такой задачи?


person Andreas Hof    schedule 23.06.2017    source источник


Ответы (3)


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

Kafka, с другой стороны, используется для передачи сообщений (у него есть другие API, такие как потоки и подключение, с которыми я не так знаком).

В настоящее время я использую Kafka для потоковой передачи файлов журнала в режиме реального времени из клиентской системы. Из коробки Kafka действительно обеспечивает только семантику «выстрелил и забыл». Мне пришлось немного добавить, чтобы сделать семантику доставки ровно один раз (Kafka 0.11.0 должен решить эту проблему).

В целом, думайте о KAFKA как о более низкоуровневом решении с логическими доменами сообщений с очередями и, судя по тому, что я пробежался по APEX, это более тяжелая упакованная библиотека с гораздо большим количеством вещей для изучения.

Kafka позволит вам отключить базовую аналитическую систему по вашему выбору с их потребительским API.

person PragmaticProgrammer    schedule 23.06.2017

Вопрос очень общий, но я попытаюсь обрисовать несколько разных сценариев, так как здесь задействовано много параметров. Одним из них является стоимость, которая в облаке может быстро возрасти. Конечно, размер данных также важен.

Вот несколько вещей, которые вы должны учитывать:

  1. пакетная или потоковая передача: обновления идут непрерывно или процесс запускается по запросу/периодически (звучит последнее, а не первое)
  2. какая задержка требуется? То есть, какое максимальное время потребуется обновлению для распространения по системе? Ответ на этот вопрос влияет на вопрос 1)
  3. о каком количестве данных мы говорим? Если у вас размер гигабайта, терабайт или пбайт? Разные инструменты имеют разную «максимальную высоту»
  4. и какой формат? У вас есть текстовые файлы или вы берете данные из реляционных БД?
  5. Очистка и дедупликация могут быть сложными в простом SQL. Какой язык/инструменты вы планируете использовать для этой части? В зависимости от вопроса 3), размер данных, для дедупликации обычно требуется соединение по идентификатору, которое выполняется за постоянное время в хранилище значений ключа, но требует сортировки (обычно O(nlogn)) в большинстве других систем данных (spark, hadoop, так далее)

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

Одним из облачных решений, которое вы можете быстро запустить, является amazon athena (https://aws.amazon.com/athena/ ). Вы можете сбросить свои данные в S3, где их читает Athena, и вы просто платите за запрос, поэтому вы не платите, когда не используете их. Он основан на Apache Presto, поэтому вы можете написать всю систему, используя в основном SQL.

В противном случае вы можете использовать Elastic Mapreduce с Hive (http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive.html). Или Spark (http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark.html). Это зависит от того, какой язык/технология вам наиболее удобна. Также есть аналогичные продукты от Google (BigData и т.д.) и Microsoft (Azure).

person Roberto Congiu    schedule 23.06.2017

Да, вы можете использовать Apache Apex для своего варианта использования. Apache Apex поддерживается с помощью Apache Malhar, который может помочь вам быстро создать приложение для загрузки данных с помощью оператора ввода JDBC, а затем либо сохранить их в облачном хранилище (может быть S3), либо вы можете выполнить дедупликацию перед сохранением их в любой приемник. Он также поддерживает оператора дедупликации для таких операций. Но, как упоминалось в предыдущем ответе, для работы Apex требуется Hadoop.

person Vikram Patil    schedule 04.07.2017